【发布时间】:2011-02-07 12:31:31
【问题描述】:
我想配置我的 Solr 搜索引擎,以便我输入的搜索词完全匹配。
例如。 “taxes”应该返回带有“taxes”而不是“tax”、“taxation”等的文件。
任何帮助或提示将不胜感激。
【问题讨论】:
我想配置我的 Solr 搜索引擎,以便我输入的搜索词完全匹配。
例如。 “taxes”应该返回带有“taxes”而不是“tax”、“taxation”等的文件。
任何帮助或提示将不胜感激。
【问题讨论】:
我假设您的字段是 TextField,默认情况下 solr 会在此字段上进行模糊搜索。您想要的是将您的字段设置为字符串字段并且不添加标记器,然后您将获得完全匹配。
您甚至可以将精确搜索与模糊搜索结合起来,并使用 DisMax 来提高相对权重。
示例(schema.xml):
<field name="name" type="string" indexed="true" stored="false" required="true" />
<field name="nameString" type="string" indexed="true" stored="false" required="true" />
<copyField source="name" dest="nameString"/>
示例(solrconfig.xml):
<requestHandler name="accounts" class="solr.SearchHandler">
<lst name="defaults">
<str name="defType">dismax</str>
<str name="qf">
nameString^10.0 name^5.0 description^1.0
</str>
<str name="tie">0.1</str>
</lst>
</requestHandler>
【讨论】:
要关闭 schema.xml 中的词干提取,您可以像这样定义文本字段:
<types>
<!-- other fields definition -->
<fieldType name="text_no_stem" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- other fields definition -->
</types>
<fields>
<!-- other fields definition -->
<dynamicField name="*_nostem" type="text_no_stem" indexed="true" stored="true"/>
<!-- other fields definition -->
</fields>
我正在使用sunspot 将 solr 与 Ruby on Rails 集成。在 schema.xml 中,我定义了我的可搜索块,如下所示:
searchable do
text(:wants, as: :wants_nostem)
end
【讨论】:
关闭stemming。
【讨论】:
使用引号获得完全匹配的结果:
例子:
核心名称:core1 键:名称字符串
http://localhost:8983/solr/core1/select?q=namestring:"taxes"&wt=json&indent=true
【讨论】:
使用 solr 字符串字段,该字段将执行精确值搜索,例如
<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />
【讨论】: