elasticsearch 在Elasticsearch中,如何搜索任意子字符串?
在Elasticsearch中,如何搜索任意子字符串,可能包括空格?(搜索单词的一部分是不够的;我想搜索整个字段的任何子字符串。) 我想它必须在
elasticsearch 在Elasticsearch中,如何搜索任意子字符串?,
elasticsearch,lucene,
elasticsearch,Lucene,在Elasticsearch中,如何搜索任意子字符串,可能包括空格?(搜索单词的一部分是不够的;我想搜索整个字段的任何子字符串。) 我想它必须在关键字字段中,而不是文本字段中 假设我的Elasticsearch索引中只有几千个文档,我尝试: "query": { "wildcard" : { "description" : "*plan*" } } 这和预期的一样——我得到了描述中“计划”的每一项,甚至是“替换”之类的 现在,我想做 "query": {
关键字
字段中,而不是文本
字段中
假设我的Elasticsearch索引中只有几千个文档,我尝试:
"query": {
"wildcard" : { "description" : "*plan*" }
}
这和预期的一样——我得到了描述中“计划”的每一项,甚至是“替换”之类的
现在,我想做
"query": {
"wildcard" : { "description" : "*plan is*" }
}
…这样我就可以将文档与“卡普兰不是”以及其他许多可能性进行匹配
对于通配符、匹配前缀或我可能看到的任何其他查询类型,这似乎是不可能的。如何简单地搜索任何子字符串?(在SQL中,我只需要做描述,比如“%plan is%”
)
(我知道任何这样的查询对于大型数据集来说都是缓慢的,甚至可能是不可能的。)您是否在elasticsearch中尝试过?它听起来确实像是你可能感兴趣的东西。我希望这个Elasticsearch可能内置了一些东西,因为这个简单的子字符串搜索似乎是一个非常基本的功能(考虑一下,它是作为
str()实现的)
在C中,类似于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带领我;我只是想提供更多细节。您需要标记您的描述,以便搜索单独的单词。阅读他们的文档:如果你真的想搜索仲裁子字符串,你需要使用ngrams:可能的重复是希望弹性中有更简单的东西,因为这个简单的子字符串搜索似乎是一个非常基本的功能。这是正确的,但对于长度超过32766的字段,它不起作用:原始消息:字节的长度最多为32766;获取32804“,”原因“:{”类型“:“最大字节数\u长度\u超出\u异常”,“原因”:”字节的长度最多可以是32766;有32804个解决方法吗?有,所以,将任何值保持在32K以下。我假设默认情况下它是UTF-8?我不能…有很多解决方法,但没有解决方案。我仍然看不到一个简单的子字符串搜索方法,除了通过regexp在值低于32K的关键字字段上。我同意,这是有限的。我有在此处编辑了elasticsearch问题: