【问题标题】:elasticsearch search query for exact match not working完全匹配的弹性搜索搜索查询不起作用
【发布时间】:2017-09-13 08:25:01
【问题描述】:

我正在使用 query_string 进行搜索。搜索工作正常,但它让所有带有小写字母和大写字母的记录都匹配。但我想精确匹配区分大小写? 例如 : 搜索字段:“标题” 当前输出:

  1. 标题
  2. 标题
  3. 标题,

我只想先(标题)。如何解决此问题。

我的java代码:

QueryBuilder qbString=null;

qbString=QueryBuilders.queryString("title").field("field_name");

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您需要配置映射/文本处理,以便标记索引而不是小写。

    “标准”分析器小写(并删除停用词)。

    下面的示例展示了如何配置分析器和映射来实现此目的:https://www.found.no/play/gist/7464654

    【讨论】:

    • 谢谢 Alex,我已经通过设置空白分析器而不是默认分析器解决了这个问题。之前我对文档使用无模式映射。
    【解决方案2】:

    在 ElasticSearch 版本 5 + 中,没有已分析和未分析索引的概念,它由类型驱动!

    String 数据类型已被弃用,取而代之的是文本和关键字,因此如果您的数据类型是文本,它将表现得像字符串,可以进行分析和标记化。

    但如果数据类型被定义为关键字,则自动对其进行不分析,并返回完全精确匹配。

    因此,当您想要区分大小写时,您应该记住将类型标记为关键字。

    下面的代码示例用于使用此定义创建索引:

    PUT testindex
    {
        "mappings": {
          "original": {
            "properties": {
              "@timestamp": {
                "type": "date"
              },
              "@version": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "APPLICATION": {
                "type": "text",
                "fields": {
                    "exact": {"type": "keyword"}
                }
              },
              "type": {
                "type": "text",
                "fields": {
                    "exact": {"type": "keyword"}
                }
              }
            }
          }
        }
      }
    

    【讨论】:

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