Wordを検索し、次のようにファセットで結果を取得します。
<lst name="itemtype">
<int name="Internal">108</int>
<int name="Users">73</int>
<int name="Factory">18</int>
<int name="Supply Chain Intermediaries">6</int>
<int name="Company">1</int>
<int name="Monitor/Auditor firm">0</int>
</lst>
それからfq=itemtype:Factory
のような条件を書きました。結果が出ました。しかし、fq=itemtype:Supply Chain Intermediaries
の結果が得られません。
問題の原因は、条件内のスペースにあると考えています(サプライチェーン仲介者)。 urlencode
(スペースを%20
に置き換えるため)でも試しました。しかし、それは役に立たない。これを解決するのを手伝ってもらえますか?
単一の値の場合、正常に機能しています。次のようなクエリを作成します。
http:localhost:8080/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq={!raw f=itemtype}Supply Chain Intermediaries
しかし、私は複数の値を書く必要があります。 rawを使用しない元のクエリは次のとおりです。
http://localhost/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq=(itemtype:Company itemtype:Supply Chain Intermediaries)
これを解決するのを手伝ってください。
アイテムタイプフィールドはどのように分析されますか?
タイプがstringの場合は、次を使用します。
fq=itemtype:"Supply Chain Intermediaries"
それ以外の場合も試すことができます:
fq=itemtype:(Supply Chain Intermediaries)
OR
が設定のデフォルト演算子であり、text
がデフォルトの検索フィールドであると仮定すると、クエリは次のように変換されます。
fq=itemtype:Supply OR text:(Chain Intermediaries)
チェーンおよび仲介者は、デフォルトの検索フィールドに対して検索されます。
ここで説明したさまざまなソリューションを試しましたが、どれも機能しませんでした。しかし、私はこのように解決しました:
fq=itemtype: *Supply\ Chain\ Intermediaries*
ここでは、スペースは\
でエスケープされます
上記の文字列は、文字列Lorem Supply Chain Intermediaries Ipsum
と一致します
WordがSupply Chain Intermediaries Ipsum
で始まる場合は、
fq=itemtype: Supply\ Chain\ Intermediaries*
これはこの質問に直接答えませんが、この問題の解決に役立つ場合があります。
Solrに投稿する前にスペースを削除します
検索ではなくファセットに使用されるフィールドの場合、値をスペースで保存することは重要ではありません。値は単にキーとして扱われます。次のようにフィールドitemtype
を保存します:"supplychainintermediaries", "monitorauditorfirm"
など.
ファセット値をユーザーに表示するときは、キー値を表示値にマップする辞書を使用するだけです。そのようです:
"supplychainintermediaries" --> "Supply Chain Intermediaries"
"monitorauditorfirm" --> "Monitor/Auditor Firm"
使用できると思います
fq={!raw f=itemtype}Supply Chain Intermediaries
その目的のために
Solrバージョン4.0以降では、!rawの代わりに!termを使用する必要があることがわかります。
http://mail-archives.Apache.org/mod_mbox/lucene-solr-user/201012.mbox/%[email protected]%3E
ごきげんよう。
私は次のものを置き換えることで空白の問題を修正しました:
$tmp[] = $name . ':' . $this->_escapeValue($value);
で:
$tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';
SolrSource.php
ファイルのエスケープ値の後に引用符を追加することを意味します。