gpt4 book ai didi

带有变音符号的 solr autosuggest

转载 作者:行者123 更新时间:2023-12-01 11:46:39 28 4
gpt4 key购买 nike

我将 solr4 与 TermsComponent Autosuggest 一起使用(如 here 所述)我们正在做一个正则表达式“startsWith”-search,忽略大写/小写,整个 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

不幸的是,这个解决方案无法处理变音符号、变音符号、重音符号……所以下面的方法将不起作用:

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>

最佳答案

这里的问题是术语组件对索引标记起作用,用于搜索和查询。因此,如果您进行 unicode 折叠(这就是您所做的),您将存储折叠的文本版本。您将不带重音匹配它,但随后您也将不带重音找回它。

我可以想到两种选择:

1) 在一个字段中存储折叠和非折叠术语。因此,以某种方式让“Têstáccènt”映射到“Test accent|Têstáccènt”。您匹配前缀“Test..”,然后在客户端提取第二个术语。不过,如何做到这一点可能很棘手。

2) 使用Suggester反而。这建立在拼写检查器之上,并且 - 如果我正确阅读文档 - 允许指定替代字段类型,其分析器在建议者的索引/查询期间使用(使用 solrconfig.xml 中几乎没有记录的 queryAnalyzerFieldType 参数)。因此,您的原始文本会以折叠形式复制到建议者中。但是,可以推测,一旦 Suggester 匹配了某些东西,它将返回原始形式。但是,我不确定。主要是因为它被宣传为刚刚诞生的 Lucene/Solr 4.1 的一个特性 AnalyzingSuggester .事实上,这篇文章专门涵盖了您的用例:

With an analyzer that folds or normalizes case, accents, etc. (e.g., using ICUFoldingFilter), the suggestions will match irrespective of case and accents. For example, the query "ame..." would suggest Amélie.

问题是此时您需要自己组装一个完整的示例。很少有指导。但它 (AnalyzingSuggester) 可能是您最好的选择。

关于带有变音符号的 solr autosuggest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14732713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com