我使用solr4與TermsComponent
自動提示Solr的自動提示(如描述here) 我們正在做一個正則表達式「startsWith」 - 搜索,忽略上/下-情況下,整個SEARCHQUERY看起來是這樣的:用變音符號
<solr>/terms
?terms.fl=name
&terms=true
&terms.limit=5
&terms.regex=<term>.*
&terms.regex.flag=case_insensitive
&qt=%2Fterms
讓我給你舉幾個例子是什麼返回:
test -> Test Listing; test lowercase
Test -> Test Listing; test lowercase
不幸的是,這個解決方案不能處理變音符號,umlaute,口音..所以下面將不起作用:
têst -> Test Listing; test lowercase; Têst áccènt
Test -> Test Listing; test lowercase; Têst áccènt
領域是一個string
- 我已經試過了標記化test_en
爲好,但沒有成功
<field name="name" type="string" indexed="true" stored="true" required="true" />
什麼是啓用雙向的最佳方式口音,搜索出該自動提示?
編輯:更改爲AnalyzerSuggester:
<searchComponent class="solr.SpellCheckComponent" name="autosuggest">
<lst name="spellchecker">
<str name="name">autosuggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingLookupFactory</str>
<str name="storeDir">autosuggest</str>
<str name="buildOnCommit">true</str>
<str name="field">asug</str>
<str name="suggestAnalyzerFieldType">text_asug</str>
<!-- Suggester properties -->
<bool name="exactMatchFirst">true</bool>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/autosuggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">autosuggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.collate">true</str>
</lst>
<arr name="components">
<str>autosuggest</str>
</arr>
</requestHandler>
。
<fieldType name="text_asug" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
我用分析結構試驗過它,並將我的修改附加到了我的第一篇文章中(我對查詢分析器也有相同的配置,但是刪除它並沒有改變結果,所以我猜這是不需要的)。所以'tést','test','Têst'都會返回'test name',這很奇怪,因爲asug只是一個copyField的名字,甚至沒有存儲..? –
我隨機得到它「工作」 - 似乎是這樣的建議ter總是返回INDEXED字段值而不是實際字段值。 如果我在沒有索引分析器的情況下提供文檔,那麼使用索引分析器重新啓動,我找回正確的字段。不幸的是,這顯然不能用作最終解決方案:/ –
您確定已從_original_字段中刪除摺疊分析器嗎?據我所知,AnalysisSuggester的文檔非常具體地說,匹配是在分析(摺疊)的形式,但結果是在原始的表面形式。如果您不確定,我會檢查從原始字段返回的令牌。 而我不確定copyField來自哪裏,對於簡單的場景你不應該需要它。 –