我正在使用具有以下配置的solr建议组件:
schema.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"/>
solrconfig.xml
<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 field2
中搜索term, term1 and term2.
((备忘录:期限或用户名:期限或字段:期限或字段1:期限或 field2: term )AND(备忘录: term1 或用户名: term1 OR字段: term1 OR field1: term1 OR field2: term1 )AND(备注: term2 或 用户名: term2 或字段: term2 OR field1: term2 或 FIELD2: TERM2 ))
有没有办法动态选择spell
字段。或者有没有办法只能在多值字段中搜索特定字段
我正在使用Apach Solr 4 Alpha。