4

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

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

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

我在java中的代码:

QueryBuilder qbString=null;

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

4

2 回答 2

2

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

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

这是一个示例,显示如何配置分析器和映射以实现此目的:https ://www.found.no/play/gist/7464654

于 2013-11-14T10:33:30.740 回答
0

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

不推荐使用字符串数据类型并用文本和关键字替换,因此如果您的数据类型是文本,它将表现得像字符串并且可以被分析和标记化。

但是如果数据类型被定义为关键字,那么它会自动不被分析,并返回完全精确匹配。

因此,当您想要与区分大小写进行完全匹配时,您应该记住将类型标记为关键字。

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

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"}
            }
          }
        }
      }
    }
  }
于 2017-09-13T00:25:01.007 回答