3

すべての検索キーワードがいずれかの検索フィールドのどこかに表示される場合、Solr ベースの検索で結果が返されるようにする必要があります。

現状:

検索クエリの例:keywords: "berlin house john" name: "berlin house john" name" author: "berlin house john" name"

結果が 1 つだけで、keyword="house"、name="berlin"、author="john" であり、これら 3 つの単語の順列が他にない場合を考えてみましょう。

defaultOperator が OR の場合、Solr はすべてのフィールドのすべてのキーワードの単純な OR 演算を返します。これは膨大なリストです。もちろん、最も一致する結果は最初の位置にありますが、次の結果にはほとんど関連性がありません (おそらく一致するフィールドが 1 つだけ)、ユーザーを混乱させるだけです。

一方、デフォルトの演算子を AND に切り替えると、まったく結果が得られません。3 つのフィールドすべてで、3 つの単語すべてに完全に一致するものを見つけようとしているのだと思いますが、もちろん存在しません。

検索語は、ユーザーがフリーテキストを入力する検索入力からアプリケーションに渡されます。特定の言語規則 (ハッシュタグなど) はありません。

純粋な Lucene で以前に行ったことがあるので、私が求めていることが可能であることを知っています。私は何を間違っていますか?

4

2 に答える 2

3

すべての単語がすべてのフィールドに表示されることを確認する必要がある場合は、インデックス時にすべての関連フィールドを 1 つのフィールドにコピーし、代わりにこのフィールドをクエリすることをお勧めします。そのためには、新しいフィールドを導入してcopyFieldから、コピーするすべてのソース フィールドに使用する必要があります。すべてのフィールドをコピーするには、次を使用します。

<copyField source="*" dest="text"/>

詳細については、 http://wiki.apache.org/solr/SchemaXml#Copy_Fieldsを参照してください。

同様のアプローチは、クエリ時にブール代数を使用することです。これは、上記のソリューションとは少し異なります。

クエリは次のようになります

(keywords:"berlin" OR keywords:"house" OR keywords:"john") AND
(name:"berlin" OR name:"house" OR name:"john") AND
(author:"berlin" OR author:"house" OR author:"john") 

これは基本的に次のように述べています: 1 つ以上の用語がキーワードで一致する必要があり、1 つ以上の用語が名前で一致する必要があり、1 つ以上の用語がauthorで一致する必要があります。

于 2013-03-09T13:29:13.500 に答える
1

Solr 4 から、defaultOperator は非推奨になりました。使用しないでください。また、私にとって defaultOperator は、クエリで指定された演算子と同じように機能します。理由は言えませんが、あくまで私の経験です。

パラメータ {!q.op=AND} でクエリを実行してください

デフォルトのクエリパーサーを使用していると思いますが、間違っていたら修正してください

于 2013-03-09T12:28:26.743 に答える