在Elasticsearch中,如何搜索任意子字符串?
在Elasticsearch中,如何搜索任意子字符串,也许包括空格?(仅搜索单词的一部分是不够的;我想搜索整个字段的任何子字符串。)
我想它必须在一个keyword
字段中,而不是一个text
字段中。
假设我的Elasticsearch索引中只有几千个文档,然后尝试:
"query": { "wildcard" : { "description" : "*plan*" }
}
可以按预期工作,我得到了描述中“计划”所在的每个项目,甚至是“替代”项目。
现在,我想做
"query": { "wildcard" : { "description" : "*plan is*" }
}
…以便在许多其他可能性中将文件与“ Kaplan不是”相匹配。
似乎对于通配符,匹配前缀或我可能会看到的任何其他查询类型,这是不可能的。如何简单地搜索任何子字符串?(在SQL中,我会这样做description
LIKE '%plan is%')
(我知道对于大型数据集,任何此类查询都将很慢,甚至可能无法进行。)
回答:
我希望有可能是一个内置的这个Elasticsearch,因为这个简单的字符串搜索似乎是一个非常基本的能力(关于它的思考,它是作为strstr()
在C,LIKE
'%%'在SQL中,按Ctrl +
F在大多数文本编辑器,String.IndexOf
在C#等),但事实并非如此。请注意,regexp查询不支持不区分大小写,因此我还需要将其与该自定义分析器配对,以便索引匹配全小写字母。然后,我也可以将搜索字符串转换为小写。
{ "settings": {
"analysis": {
"analyzer": {
"lowercase_keyword": {
"type": "custom",
"tokenizer": "keyword",
"filter": [ "lowercase" ]
}
}
}
},
"mappings": {
...
"description": {"type": "text", "analyzer": "lowercase_keyword"},
}
}
查询示例:
"query": { "regexp" : { "description" : ".*plan is.*" }
}
感谢Jai Sharma带领我;我只是想提供更多细节。
以上是 在Elasticsearch中,如何搜索任意子字符串? 的全部内容, 来源链接: utcz.com/qa/429494.html