elasticsearch 在Elasticsearch中,如何搜索任意子字符串?,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 在Elasticsearch中,如何搜索任意子字符串?,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 在Elasticsearch中,如何搜索任意子字符串?

elasticsearch 在Elasticsearch中,如何搜索任意子字符串?,elasticsearch,lucene,elasticsearch,Lucene,在Elasticsearch中,如何搜索任意子字符串,可能包括空格?(搜索单词的一部分是不够的;我想搜索整个字段的任何子字符串。) 我想它必须在关键字字段中,而不是文本字段中 假设我的Elasticsearch索引中只有几千个文档,我尝试: "query": { "wildcard" : { "description" : "*plan*" } } 这和预期的一样——我得到了描述中“计划”的每一项,甚至是“替换”之类的 现在,我想做 "query": {

在Elasticsearch中,如何搜索任意子字符串,可能包括空格?(搜索单词的一部分是不够的;我想搜索整个字段的任何子字符串。)

我想它必须在
关键字
字段中,而不是
文本
字段中

假设我的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问题: