在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

回到顶部