如果包含关键短语,我需要搜索,其中应该有搜索匹配项,但关键短语可以有空格,并且整个短语必须在那里。
按照我的理解,index_analyzer
和searh_analyzer
都可以在空间上分裂,也可以不分裂,这给出了四种可能性——似乎没有一种能满足我的需求。
例如,假设关键短语是"一对一"。这意味着我希望搜索"一二"或"一二三"匹配,而不是与"一"匹配的搜索。考虑不同的选择:
在- 索引和搜索上拆分 ->不起作用,因为"一个"将匹配
- 在索引上拆分,但在搜索上不拆分 ->不起作用,因为"一二"不匹配
- 不要在索引上拆分,在搜索上拆分 ->不起作用,因为"一二"不匹配
- 不要在索引和搜索上拆分 ->不起作用,因为"一二三"不匹配
一种可能的解决方案是使用 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
并使用例如通配符搜索。