私はSolrと一緒に作業しており、EdgeNGramFilterFactoryの仕組みを理解したいと思います。Solr nGramフィルタminGramSize - 2文字のみの単語のトークン
たとえば、「1 tb」という用語を検索しています。私が検索しているフィールドの属性を持つ製品はほとんどありません。
これは、このフィールドタイプのインデックス時間に適用されるフィルタです。
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" />
ここで「1 tb」という用語を検索すると、結果が得られません。
「5メガピクセル」の商品がほとんどありません。「5メガ」を検索すると結果が出ます。後で私はそれが "5私"のために働かないことがわかった。結果は出ない。
nGramフィルタを削除しても正常に動作します。さらに、minGramSize = "1"に設定すると、クエリ "1 tb"が正常に動作します。
私はtbという用語に対して、トークンtbが有効であると仮定していました。しかし、2のminGramSizeを適用すると作成されないようです!
誰かが理由を説明できますか?
ここにはスキーマで定義されたフィールドがあります。
<fieldType name="AttributesField" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
に分解されますと
あなたはSolrの管理ページで同じように分析したのですか?フィールドに使用された正確なfieldTypeは何ですか? –
テキストフィールドタイプを作成して、別々のフィルタとトークナイザを適用しました。 – Krunal
同じことを説明できますか?それは何を持っていますか? –