首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr建议(拼写检查)多项查询的动态字段选择

Solr建议(拼写检查)多项查询的动态字段选择
EN

Stack Overflow用户
提问于 2012-08-16 11:39:49
回答 1查看 2.4K关注 0票数 6

我使用solr建议组件的配置如下:

schema.xml

代码语言:javascript
复制
<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"/>

solrconfig.xml

代码语言:javascript
复制
<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_memousername提供有效的建议,用户可以动态地添加和删除要搜索的字段。

我知道我可以这样做:

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

但是,如果您有很多字段和多个术语查询,这是在戏剧性地放慢速度。

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

(备注:术语或用户名:术语或字段:术语或字段1:术语或字段2:术语)和(备注:术语1或用户名:术语1或字段1:术语1或字段2:术语2)

是否有任何方法动态选择spell字段。还是只有在多值字段中才能搜索特定字段?

我用的是Apach Solr 4阿尔法。

EN

回答 1

Stack Overflow用户

发布于 2013-07-01 12:55:50

您所需要做的就是使用迪斯麦克斯eDismax。SpellcheckComponent使用查询参数自动运行每个建议。

所以,您必须这样查询:

代码语言:javascript
复制
/suggest?q={!dismax}term1 term2 term3&qf=memo username field field1 field2

代码语言:javascript
复制
/suggest?q=term1 term2 term3&defType=dismax&qf=memo username field field1 field2

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11986311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档