web-dev-qa-db-ja.com

空白を含むsolrクエリ

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)

これを解決するのを手伝ってください。

30
Brahmaji Rao

アイテムタイプフィールドはどのように分析されますか?

タイプがstringの場合は、次を使用します。

fq=itemtype:"Supply Chain Intermediaries"

それ以外の場合も試すことができます:

fq=itemtype:(Supply Chain Intermediaries)

ORが設定のデフォルト演算子であり、textがデフォルトの検索フィールドであると仮定すると、クエリは次のように変換されます。

fq=itemtype:Supply OR text:(Chain Intermediaries)

チェーンおよび仲介者は、デフォルトの検索フィールドに対して検索されます。

37
Umar

ここで説明したさまざまなソリューションを試しましたが、どれも機能しませんでした。しかし、私はこのように解決しました:

fq=itemtype: *Supply\ Chain\ Intermediaries*

ここでは、スペースは\でエスケープされます

上記の文字列は、文字列Lorem Supply Chain Intermediaries Ipsumと一致します

WordがSupply Chain Intermediaries Ipsumで始まる場合は、

fq=itemtype: Supply\ Chain\ Intermediaries*
15
Sri Harsha

これはこの質問に直接答えませんが、この問題の解決に役立つ場合があります。

Solrに投稿する前にスペースを削除します

検索ではなくファセットに使用されるフィールドの場合、値をスペースで保存することは重要ではありません。値は単にキーとして扱われます。次のようにフィールドitemtypeを保存します:"supplychainintermediaries", "monitorauditorfirm"など.

ファセット値をユーザーに表示するときは、キー値を表示値にマップする辞書を使用するだけです。そのようです:

"supplychainintermediaries" --> "Supply Chain Intermediaries""monitorauditorfirm" --> "Monitor/Auditor Firm"

2
James Lawruk

使用できると思います

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

ごきげんよう。

1
slhsen

私は次のものを置き換えることで空白の問題を修正しました:

$tmp[] = $name . ':' . $this->_escapeValue($value);

で:

$tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';

SolrSource.phpファイルのエスケープ値の後に引用符を追加することを意味します。