gpt4 book ai didi

solr - Solr 建议(拼写检查)多词查询的动态字段选择

转载 作者:行者123 更新时间:2023-12-04 16:11:57 28 4
gpt4 key购买 nike

我正在使用具有以下配置的 solr 建议组件:

架构.xml


<fieldType name="textSpell" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="image_memo" type="text_general"/>
<field name="username" type="text_general"/>
<field name="image_memo" type="text_general"/>
<field name="image_text" type="text_general"/>
<!-- More fields included here -->
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="spell"/>

配置文件

<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">spell</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>

<requestHandler class="org.apache.solr.handler.component.SearchHandler"
name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">6</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.maxCollations">6</str>
<str name="spellcheck.maxCollationTries">1000</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.collateParam.mm">100%</str>
</lst>
<arr name="components">
<str>suggest</str>
<str>query</str>
</arr>
</requestHandler>

如您所见,有一个字段 spell我用于建议查询。
即使对于多个术语查询,这也很有效。

但我需要的是仅搜索选定的字段。
因此,例如,我只需要对字段 image_memo 的有效建议和 username用户可以动态添加和删除要搜索的字段。

我知道我可以做这样的事情:

q=(image_memo:*search* OR image_username:*search*)



但是如果你有很多字段和一个多词查询,这会显着减慢。

示例:在字段中搜索 memo, username, field, field1 and field2term, term1 and term2.

((memo:term OR username:term OR field:term OR field1:term OR field2:term) AND (memo:term1 OR username:term1 OR field:term1 OR field1:term1 OR field2:term1) AND (memo:term2 OR username:term2 OR field:term2 OR field1:term2 OR field2:term2))



有没有办法动态选择 spell领域。或者有没有一种方法可以只在多值字段中搜索特定字段

我正在使用 Apache Solr 4 Alpha。

最佳答案

您需要做的就是使用 DismaxeDismax . SpellcheckComponent 使用您的查询参数自动运行每个建议。

所以,你必须这样查询:

/suggest?q={!dismax}term1 term2 term3&qf=memo username field field1 field2

或者
/suggest?q=term1 term2 term3&defType=dismax&qf=memo username field field1 field2

如果您不想使用 (e)dismax,您可以实现您的自定义查询解析器。

关于solr - Solr 建议(拼写检查)多词查询的动态字段选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11986311/

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