0

個々の単語や部分句の「で始まる」に基づいてクエリを実行できるインデックスを作成しようとしています。

たとえば、テキスト " blah blah stuff couple blue drums blah more blah" (これは基本的にコピー フィールドを使用したレコードの全文検索であることに注意してください) が与えられた場合、次のように一致させたいと考えています。

  • クー
  • カップル
  • カップルブルー
  • カップルブルー
  • ブルードラム
  • ブルードルー

「カップル ドラム」のクエリと一致するべきではありません。

「text_general」タイプを使用してみましたが、「cou」などの部分的な単語クエリは実行されません。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

エッジ ngram フィルターも試しましたが、必要なフレーズを実行していません。たとえば、text:'couple drums'「カップル」または「ドラム」の結果を返すクエリなどです。

<fieldType name="fulltext2" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.LowerCaseTokenizerFactory"/>
  </analyzer>
</fieldType>

私がやろうとしていることを達成するトークナイザーとフィルターの組み合わせはありますか?

4

2 に答える 2

1

入力が実際にフレーズである場合、Lucene のフレーズ検索を使用すると、カップル ドラムのようなクエリが除外されます (入力に「カップル ドラム」がフレーズとして含まれている場合を除く)。

Stupid Lucene Tricks: Exact Match, Starts With, Ends Withも参照してください。

于 2013-01-14T21:20:16.677 に答える
0

eDismaxパッチでExpose SpanFirst を使用して solr-core をビルドする必要があると思います。

于 2016-10-19T13:44:37.903 に答える