如何在Elasticsearch中匹配同一查询的不同实例?

时间:2018-10-06 16:37:33

标签: node.js elasticsearch aws-elasticsearch

示例1: 我的查询字词是“ abcd”。

我的查询结构是这样的:

    query: {
       query_string: {
          query: "abc",
          fields: ["field1", "field2", "field3"]
       }
    },
    size: 50,
    "highlight": {
    "fields": {
        "field1": {},
        "field2": {},
        "field3": {}
    }

它与以下实例匹配:

abc abcs abc_def_ghi

但是它与def_abc或def_abc_ghi不匹配。 基本上是abc位于字符串中间的情况。

示例2: 在上面的同一示例中,如果我的查询是abc_def

尽管存在abc_def,但它与abc_def_ghi不匹配。

我尝试了prefix_phrase,它解决了方案2,但是漏掉了示例1的问题。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

对于这些用法,您应该使用wildcard in queryregular expression

如果您使用词条查询,则可以改用wildcard term queryregexp query

答案 1 :(得分:0)

  • 顾名思义,phase_prefix就像穷人自动完成一样,它会搜索以您的情况abcabcsabc_def_ghi开头的字段。因为在abc的情况下,您的字段不是以def_abc开头,所以def_abc_ghi不能与词组前缀一起使用。
  • 尝试使用character filters(特别是Pattern Replace Character Filter)将_(空格)替换为您字段中的(空格),而analyzing字段中。检查此answer。因此您的令牌会生成[def,abc,ghi],而不是[def_abc_ghi]之类的单个令牌。那么您可以在已分析的字段上使用cross_field进行搜索,该字段应满足您提到的所有情况。