在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








