web-dev-qa-db-ja.com

配列フィールドのSolrクエリ構文

配列フィールド内を検索するにはどうすればよいですか?

デフォルト設定でsolr4.2を使用しています。 SolrNetを使用していくつかのhtmlおよびpdfドキュメントにインデックスを付けました。これは、admin search *:*を使用して検索したときのそのようなドキュメントのサンプル結果です。

enter code here
<doc>
<str name="id">2</str>
<date name="last_modified">2011-12-19T17:33:25Z</date>
<str name="author">name</str>
<str name="author_s">name</str>
<arr name="title">
  <str>CALIFORNIA CODES</str>
</arr>
<arr name="content_type">
  <str>application/pdf</str>
</arr>
<str name="resourcename">T01041.pdf</str>
<arr name="content">
  <str> PDF text here </str>
</arr>
<long name="_version_">1431314431195742208</long>
</doc>

content:*を使用して検索すると、0件の結果が返されます。

11
chadisbad

content:*の代わりにcontent:[* TO *]を試してください。これにより、フィールドcontentが空でないすべてのドキュメントがフェッチされます。

配列/複数値フィールドのクエリの場合、実行する内容によって異なります。次のような複数値のフィールドがある場合:

<arr name="tag_names">
    <str>death</str>
    <str>history</str>
    <str>people</str>
    <str>historical figures</str>
    <str>assassinations</str>
</arr>

deathhistoryの両方がtag_namesであるドキュメントを検索し、次のようなクエリを発行します。

q=tag_names:(death AND history)

ORを実行するには、

q=tag_names:(death OR history)
14
arun

あなたの質問への答えはとても簡単です。

あなたのSchema.xmlファイルは、フィールドが name = "content" indexed = "false" つまり、コンテンツフィールドは検索できません。したがって、「コンテンツ」を検索すると、0件の結果が返されます。

Schema.xmlファイルを変更し、コンテンツフィールドをindexed = "true"として作成してください。そうすると、フィールドが焼けやすくなります。

ファイルを保存します
Solrを再起動します。
インデックスをクリアします。
ドキュメントのインデックスを再作成します

これで、content:*で検索できるようになります。

問題が解決した場合は、回答を受け入れてください...

3
Jayesh Bhoyar