弹性搜索匹配包含的带有空格的短语



如果包含关键短语,我需要搜索,其中应该有搜索匹配项,但关键短语可以有空格,并且整个短语必须在那里。

按照我的理解,index_analyzersearh_analyzer都可以在空间上分裂,也可以不分裂,这给出了四种可能性——似乎没有一种能满足我的需求。

例如,假设关键短语是"一对一"。这意味着我希望搜索"一二"或"一二三"匹配,而不是与"一"匹配的搜索。考虑不同的选择:

  1. 索引和搜索上拆分 ->不起作用,因为"一个"将匹配
  2. 在索引上拆分,但在搜索上不拆分 ->不起作用,因为"一二"不匹配
  3. 不要在索引上拆分,在搜索上拆分 ->不起作用,因为"一二"不匹配
  4. 不要在索引和搜索上拆分 ->不起作用,因为"一二三"不匹配

一种可能的解决方案是使用 type 关键字为该字段创建新的映射,然后它不会被ElasticSearch分析,而是"按原样"存储(实际上,如果您需要以某种方式处理/更改它,您可以对它运行规范化器(。然后,您无需处理分析器。

假设您有名称为description的字段,那么映射可能如下所示:

{
...
"description": {
"type": "text", // assuming you originally have it as text
"fields": {
"original": "keyword",
"ignore_above": 512 // You can skip or change it and ES applies default value. 
}
}

上面的代码意味着ElasticSearch将保留两个版本的消息 - 默认分析和未分析的新版本。然后,您可以使用以下名称访问它:description.original并使用例如通配符搜索。

最新更新