首页 > 解决方案 > 哪个分析器用于 Solr-Query

问题描述

我在我的模式中添加了一个使用 EdgeNgramFilter 作为分析器的字段类型。

{
  "add-field-type" : {
     "name":"text_edge_ngram",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer" : {
        "tokenizer":{
           "class":"solr.WhitespaceTokenizerFactory" },
        "filters":[
          {"class":"solr.LowerCaseFilterFactory"},
          { "class":"solr.EdgeNGramFilterFactory",
            "minGramSize":"1",
            "maxGramSize":"4"}
          ]
      }
  }
}

此外,我已将此类型分配给一个字段:

{
  "replace-field" : {
      "name":"MyField",
      "type":"text_edge_ngram",
      "uninvertible":true,
      "indexed":true,
      "stored":true
    }
}

我已重新索引我的文档,但现在以下查询未返回预期结果。这里有一个例子:

.../select?q=aweso没有结果

但是,如果我查询那个单一的字段

.../select?q=MyField:aweso,结果我得到'真棒'。

如果有人能解释发生了什么或给我提示如何排除故障,那就太好了。

标签: solr

解决方案


您需要在请求处理程序solrconfig.xml下的文件中设置默认搜索字段,或者 在 中指定默认参数值,或者由请求中的查询时间值覆盖。/queryIntParamssolrconfig.xml

<requestHandler name="/select" class="solr.SearchHandler"> 
       <lst name="defaults">
          <str name="df">MyField</str>
       </lst>
</requestHandler>

我不喜欢使用 ConfigAPI 来更新 solr cofig 设置并将默认配置直接保存在solrconfig.xml文件中。

以下配置适用于您定义的几个请求处理程序:

<initParams path="/select,/get,standard">
   <lst name="defaults">
      <str name="df">term1 term2</str>
      <str name="q.op">AND</str>
   </lst>
</initParams>

这个示例 SearchHandler 声明展示了 SearchHandler 的用法,其中声明了许多默认值。请注意,同一请求处理程序(SearchHandler)的多个实例可以使用不同的名称(和不同的 init 参数)多次注册


推荐阅读