我使用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来自哪里,对于简单的场景你不应该需要它。 –