私は2つの同様の使用例で苦労しています。連結された単語のSolrインデックスの検索
ここに私のインデックスから文書例です:
{
"id":"E850AC8D844010AFA76203B390DD3135",
"brand_txt_en":"Tom Ford",
"catch_all":["Tom Ford",
"FT 5163",
"Tom Ford",
"FT 5163",
"DARK HAVANA"],
"model_txt_en":"FT 5163",
"brand_txt_en_split":"Tom Ford",
"model_txt_en_split":"FT 5163",
"color_txt_en":"DARK HAVANA",
"material_s":"acetato",
"gender_s":"uomo",
"shape_s":"Wayfarer",
"lens_s":"cerchiata",
"modelkey_s":"86_1_FT 5163",
"sales_i":0,
"brand_s":"Tom Ford",
"model_s":"FT 5163",
"color_s":"DARK HAVANA",
"_version_":1569456572504997895
}
問合せ:brand_txt_en_split:tomford
ません結果は!
フィールドタイプは、Solrのデフォルトです:
<fieldType name="text_en_splitting" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
私はWordDelimiterFilterFactoryは単語を連結することにより、「tomford」トークンを生成するために期待したが、予想通りそれは働いていないように見えます。
「逆」のユースケースは、次のとおりです。
{
... "model_txt_en_split": "The Clubmaster", ...
}
私はその文書は、このクエリ後に発見されるようにしたい: クラブマスター
私は後者の場合のEdgeNGramフィルタを使用する必要があります推測しますしかし、実際にそれを行う方法を得ることができません。あなたの助け
ありがとうアナライザやフィルタの詳細を読むことができます。残念ながらそれは私の質問に対する答えではありません。つまり、他のすべてのトークンを連結したトークンを追加するにはどうすればいいですか? 例: "ホットスポットセンサー" - > "ホットスポットセンサー" –
回答を更新しました。 PatternReplaceFilterFactoryを使用してみてください。一旦schema.xmlを追加/更新します。サーバーを再起動し、データのインデックスを再作成します。 –
私はもう一度アップデートして、あなたに役立つかどうかチェックしてください。 –