Solr精确单词搜索

Rut*_*uth 19 search solr

我想配置我的Solr搜索引擎,以便与我输入的搜索词完全匹配.

例如."税收"应该归还"税收"而非"税收","税收"等文件.

任何帮助或提示将不胜感激.

dev*_*rce 21

我假设你的字段是一个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"/>
Run Code Online (Sandbox Code Playgroud)

示例(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>
Run Code Online (Sandbox Code Playgroud)

  • 这是否可以在查询时使用特殊操作员?喜欢=税收 (5认同)

waw*_*wka 7

要关闭 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>
Run Code Online (Sandbox Code Playgroud)

我正在使用sunspot将 solr 与 Ruby on Rails 集成。在 schema.xml 中,我定义了我的可搜索块,如下所示:

searchable do
    text(:wants, as: :wants_nostem)
end
Run Code Online (Sandbox Code Playgroud)