【问题标题】:Elastic search Match query with comma value not working带有逗号值的弹性搜索匹配查询不起作用
【发布时间】:2020-04-21 13:41:30
【问题描述】:

您好,我们希望同时支持一个归档类别的部分搜索和完全匹配。

这是 category 的映射,我们通过 fields.raw

实现了这一点
"category": {
                    "properties": {
                        "name": {
                            "type": "string",
                            "analyzer": "autocomplete",
                            "search_analyzer": "standard",
                            "fields": {
                                "raw": {
                                   "type": "string",
                                   "index": "not_analyzed"
                                }
                             }
                        }
                    }
                }

一切都按预期工作,我可以进行精确搜索和部分搜索。 但是当我在数据中有字符逗号“,”时,完全匹配不起作用。 我正在搜索 category.name.raw,它是 not_analyzed 归档的

 { "query": {
"filtered": {
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "",
            "type": "cross_fields",
            "fields": [
              "filed1",
              "field2^12"
            ]
          }
        },
        {
          "match": {
            "category.name.raw": " Poverty, Poor and Hunger"
          }
        }
      ]
    }
  }
}}}

我没有得到任何结果,我不确定我做错了什么,请帮我解决这个问题。 提前致谢

【问题讨论】:

  • 你使用的是哪个版本的 ES,string 在最新版本中已弃用。a
  • @OpsterElasticsearchNinja 我们使用的是旧版本 2.X,此版本不支持关键字数据类型
  • @OpsterElasticsearchNinja 2.4.4 是版本

标签: elasticsearch elasticsearch-query


【解决方案1】:

尝试使用以下分析器:

        "lower_whitespace" : {
          "filter" : [
            "lowercase"
          ],
          "type" : "custom",
          "tokenizer" : "whitespace"
        }

有关标记器的更多详细信息,请查看以下内容: https://www.elastic.co/guide/en/elasticsearch/reference/5.1/analysis-whitespace-analyzer.html

看来您使用的是 Elastic 搜索的旧版本,考虑升级是个好主意

【讨论】:

  • 我正在搜索 category.name.raw,它是 not_analyzed 归档的
  • 由于您尝试查找部分文本使用分析器将使您的搜索更有效率,所以我认为最好使用分析器并使用空格让您能够搜索逗号“,”
  • 是的,它有效。我有 es 7.4,它正在和我一起工作;)
  • @ahmadadawi 如果我添加空格分析器,那么我将无法进行精确匹配,有很多类别包含常用词
  • 要进行完全匹配或聚合,请尝试使用 type 关键字创建另一个字段,您可以使用 copy_to 功能来做。要了解更多详情,请查看以下内容:elastic.co/guide/en/elasticsearch/reference/current/…
【解决方案2】:

问题是

    {
      "match": {
        "category.name.raw": " Poverty, Poor and Hunger"
      }
    }

虽然目标字段映射为 not_analyzed(在较新版本的 Elasticsearch 中也称为 keyword),但此处的查询输入将被分析。我认为它将继承category.name上为search_analyzer定义的standard分析器。

如果您需要完全匹配,请使用term 查询而不是match 查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2018-03-23
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多