【问题标题】:How to match different instances of the same query in Elasticsearch?如何在 Elasticsearch 中匹配同一查询的不同实例?
【发布时间】:2019-03-11 21:04:23
【问题描述】:

示例 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_ghi 不匹配,尽管存在 abc_def。

我尝试了 prefix_phrase,它解决了场景 2,但错过了示例 1 的问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js elasticsearch aws-elasticsearch


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      • 顾名思义,phase_prefix 就像可怜的人自动完成功能,它会在您的情况下搜索以给定短语开头的字段abc,abcs,abc_def_ghi。因为您的字段不是以 abc 开头的,如果是 def_abc,def_abc_ghi,它不适用于短语前缀。
      • 尝试使用character filters 特别是Pattern Replace Character Filter_ 替换为您的字段中的(空格),而<a href="/default/index/tourl?u=aHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lbGFzdGljc2VhcmNoL3JlZmVyZW5jZS9jdXJyZW50L2FuYWx5c2lzLWN1c3RvbS1hbmFseXplci5odG1s" rel="nofollow" target="_blank">analyzing</a> 您的字段。检查这个<a href="/default/index/tourl?u=aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU1MDE1MTcvZWxhc3RpY3NlYXJjaC1jaGFyLWZpbHRlci1yZXBsYWNlLWFueS1jaGFyYWN0ZXItd2l0aC13aGl0ZXNwYWNl" target="_blank" rel="nofollow">answer</a>。所以你的令牌会产生[def,abc,ghi],而不是像[def_abc_ghi]这样的单个令牌。然后您可以使用 cross_field 在应满足您提到的所有案例的分析字段上进行搜索。

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多