我一直在苦苦思索Solr以及如何處理我們德國網站的複合詞。我們主要處理衣服和配件,所以我們的搜索字詞通常是與可穿戴物品有關的詞語。我設法對DictionaryCompoundWordTokenFilterFactory
進行了微調,以便它將我們可能遇到的大多數複合搜索項分開(例如:schwarzkleid => schwarz kleid)。Solr複合詞分裂 - 如何獲得更多相關結果
但是,搜索返回不相關的結果,它返回僅包含單詞「schwarz」的項目以及僅包含單詞「kleid」的項目。因此,我不僅看到黑色禮服(黑色禮服),而且看到不同顏色的禮服和黑色物品。
實質上,Solr對拆分標記執行OR操作並返回任何包含關鍵字的項目。
我的完整查詢是這樣的:q=keywords:schwarzkleid AND deleted:0
(其中0表示產品尚未售罄)。此查詢的調試是這樣的:
"debug": {
"rawquerystring": "keywords:schwarzkleid AND deleted:0",
"querystring": "keywords:schwarzkleid AND deleted:0",
"parsedquery": "+((keywords:schwarzkleid keywords:schwarz keywords:kleid)/no_coord) +deleted:0",
"parsedquery_toString": "+(keywords:schwarzkleid keywords:schwarz keywords:kleid) +deleted:`\b\u0000\u0000\u0000\u0000",
這將返回一共有24000+結果,而如果我直接搜索keywords:schwarz AND keywords:kleid
我會得到〜10000結果這是我想要的。我正在使用Solr 4.7和Solr PHP庫通過我的Web應用程序與它進行交互。
關於如何微調我的查詢以獲得相關結果的任何想法?
這裏是有問題的字段類型:使用過濾器的查詢和edismax的QueryParser
<!-- German -->
<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="org.apache.lucene.analysis.de.compounds.GermanCompoundSplitterTokenFilterFactory" compileDict="true" dataDir="/home/ali/Downloads/solr-4.7.0/example/solr/findemode-dev/conf/wordlist/"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="org.apache.lucene.analysis.de.compounds.GermanCompoundSplitterTokenFilterFactory" compileDict="false" dataDir="/home/ali/Downloads/solr-4.7.0/example/solr/findemode-dev/conf/wordlist/"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
你會分享您的schema.xml中的字段類型,處理那些漂亮的禮服嗎? – cheffe
您能否在您的問題中添加整個fieldType?你不能在評論中張貼太多的代碼,你不應該。這是你的問題編輯':) :) – cheffe