0

Javaオブジェクトの形式で検索リクエストを受け取り、そこからSOLRクエリオブジェクトを作成してインデックスをクエリします。

たとえば、ユーザーがtitleというフィールドで正確な検索を実行したいとします。彼はフォームのクエリを送信します

  Field = "title", value = "Algebra", Operator = "EQUALS"

演算子が「EQUALS」と表示されたら、次のようなSolrクエリを作成します

  title:Algebra

ワイルドカードまたはステム検索の場合、リクエストは次のようになります。

  Field = "title", value = "Algebra", Operator = "LIKE"

演算子は「LIKE」であるため、私が作成しているsolrクエリは次のようになります。

  title:*Algebra*

ここでの問題は、ワイルドカードおよびその他のステム化されたオプションが機能することです。タイトルフィールドは、schema.xmlでtext_generalおよびtext(コピーフィールドオプションを介して)として定義されているため、演算子「:」を使用すると、ステム化された検索が実行され、次のような結果が取得されます。タイトルフィールドに代数の単語があります。出力として期待しているのは、タイトルが代数のレコードだけです。

構成ファイルのタイトルフィールドを「文字列」として変更する必要がある1つの解決策を知っています。しかし、これは私のステム検索とワイルドカード検索オプションに影響します。

したがって、基本的には、ステム検索(および他のすべてのtext_generalフィールドオプション)と、渡した演算子に基づく完全一致の両方をサポートするフィールドが必要です。それも可能ですか。もしそうなら、plは私に同じことを達成する方法を教えてくれます。

4

1 に答える 1

1

2つのフィールドが必要です。1つはステミング/処理済みバージョン用で、もう1つはクリーンストリングバージョン用です。<copyField>を使用して、インデックス作成時に両方が入力されるようにします。

これには「グローバル」な規則はありませんが、処理に応じてフィールド名に命名規則を採用することをお勧めします。フィールド名を文字列として使用している場合は、fieldname_stemmedをテキストフィールド(またはfieldname_text)として使用します。Operator='LIKE'と表示されている場合は、フィールド名に_stemmedまたは_textを追加します。逆に行うこともできます。正確なバージョンとしてfieldname_cleanを使用しながら、通常のフィールド名をステミングして処理します。

于 2012-12-07T10:01:05.500 に答える