简单示例
我有一份带有 name
的文档通常包含地址的文本字段:
1234 Palm Tree Street NE, Miami, FL 33101
我希望 Elasticsearch 能够找到 Palm Tree
在上面的地址中,当我使用 wildcard
时与:
*alm Tre*
相反,我没有得到任何结果。
基本原理/现实示例
有时 name
字段包含跨越 2 个单词的编码信息,如下所示:
R3358b7119 x3387HRL388
我正在使用通配符 *<search phrase>*
,当用户输入 2 个完整的“单词”或单个部分单词时,它就会起作用。但是,如果用户输入一个单词的结尾和下一个单词的开头,例如 b7119 x3387
(使用上面的示例)不会返回文档。
正则表达式似乎不是一个可能的解决方案:(
我尝试使用正则表达式搜索:
{'regexp': {'name': '.*b7119 x3387.*'}}
但即使这样也没有返回文档。
我真的很迷茫……
最佳答案
首先,要使正则表达式发挥作用,您需要使用 not_analyzed
设置您的name
映射,因为 Elasticsearch 会将正则表达式应用于由该字段的分词器,并且不是该字段的原始文本
"type": {
"properties": {
"name": {
"type": "string",
"index": "not_analyzed",
"store": true
}
}
}
关于regex - Elasticsearch - 搜索跨越 2 个单词的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56906719/