1

我目前正在使用将标记器设置为模式的自定义分析器(\W|_)+所以每个术语都只是字母并且拆分任何非字母。例如,我有一个包含内容的文档[dbo].[Material_Get]和另一个带有dbo.Another_Material_Get. 我希望能够搜索“Material_Get”并在两个文档上都得到点击,但是如果我搜索“[Material_Get]”,dbo.Another_Material_Get即使它没有括号,它仍然会命中。此外,如果我搜索“Material Get”(在引用的搜索中),我不应该得到任何点击,因为它们都没有那个短语。

我可以选择一个分析器/标记器,只要文件中的任何地方有输入字符串,即使它旁边还有其他东西,它也会找到。例如,搜索“aterial_get”将在两者中匹配。有可能做我的任何一个案例吗?

4

1 回答 1

2

从你所解释的我得到的是你想要做部分匹配也像搜索“aterial_get”。

为了满足您的所有要求,您需要更改字段的映射以在分析器中使用ngram 标记过滤器,并且不删除特殊字符。样品分析仪看起来像

{
  "settings":{
    "analysis":{
      "analyzer":{
        "partialmatch":{
          "type":"custom",
          "tokenizer":"keyword",
          "filter":[ "lowercase", "ngram" ] 
        }
      },
      "filter":{
        "ngram":{
          "type":"ngram",
          "min_gram":2,
          "max_gram":15
        }
      }
    }
  }
}

并在您的映射中为your_field上面定义的分析器“部分匹配”定义。min_gram您可以根据需要更改和的值max_gram

使用此映射,您可以进行正常的术语搜索,如下所示

{
    "term": {
        "your_field": "aterial_get"
    }
}
于 2015-05-13T12:33:38.867 回答