0

Solr/Lucene でテキスト列にインデックスを付けてLIKE '%foo%、最適な一致が最初に来る SQL のように動作させる最良の方法は何ですか? 私の場合の「ベスト」とは、最初に完全に一致し、次に余分な文字が少なくなる前に余分な文字が増えることを意味します。例えば

「1234」を検索すると返されます

  • 1234
  • 12345 (1 文字追加)
  • 01234
  • 123456 (2 文字追加)
  • 001234567890

私がこれまでに試したこととうまくいかないこと (列は としてマップされますtext_en_splitting)

  • 検索1234-> 完全一致のみ
  • 検索*1234*-> すべてを検索しますが、完全一致のスコアは高くなりません
  • search for 1234~-> は 12345 に一致しますが、完全一致のスコアは高くなりません。「001234567890」のような長い文字列には一致しません。
4

1 に答える 1

0

完全一致のスコアを高くするには、すべての一致を提供するフィールドで検索し、完全一致のみを生成する 2 番目のフィールドを検索する必要がある場合があります (いくらかブーストします)。

クエリでアスタリスク (検索が遅くなる) を使用しないようにするには、スキーマでNGramFilterFactoryを使用できます。

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

q=1234&qf=ngram_text_field,simple_text_field^2&defType=edismax

エディスマックスの詳細

于 2013-05-16T21:43:54.957 に答える