1

さまざまな方法でトークン化/フィルター処理された 5 つのフィールドのインデックス作成と検索を行っています。
しかし、検索したときに、入力したクエリがフィールド 1 の値と一致する場合、それが返される上位の結果になることを望みます。
どのように定義しますか:

  1. フィールド
  2. 100% 一致する場合、このフィールドが優先されるようなクエリ

私のスキーマには、フィールドがあります

<field name="na_title" type="text_names" indexed="true" stored="false" required="true" />

text_names は:<fieldType name="text_names" class="solr.StrField" />

na_title="何かが起こっている" というエントリは1 つしかありません。しかし、検索する text_names:somthing is going on hereと多くの結果が得られます。
指摘しておくと、クエリ アクションとインデックス アクションの両方について、そのフィールドにはアナライザーもフィルターもありません。

4

2 に答える 2

1

フィールドのインデックスを 2 回作成する必要があります。1 回は分析し、もう 1 回は分析しません。次に、分析されていないフィールドの一致を他のフィールドよりもブーストできます。

ショートカットは、これらすべてのフィールドを文字列としてインデックス付けし、copyfield を使用してそれらをテキストとしてキャッチオール フィールドにコピーすることです。これにより、クエリが少し簡素化され、重複するフィールドの数が減ります。

于 2012-09-27T19:28:50.010 に答える
1

マニュアルから:

Lucene では、複数のレベルで「ブースト」することにより、検索結果に影響を与えることができます。

  • ドキュメント レベルのブースティング - インデックス作成中 - ドキュメントがインデックスに追加される前に document.setBoost() を呼び出します。
  • ドキュメントにフィールドを追加する前 (およびドキュメントをインデックスに追加する前) に field.setBoost() を呼び出すことによる、インデックス作成中のドキュメントのフィールド レベルのブースティング。
  • クエリ レベルのブースト - 検索中にクエリ句にブーストを設定し、Query.setBoost() を呼び出します。
于 2012-09-27T16:52:29.543 に答える