elasticsearch搜索查询完全匹配不起作用

时间:2013-11-14 08:08:41

标签: elasticsearch

我使用query_string进行搜索。搜索工作正常,但它使用小写字母和大写字母匹配所有记录。但我想与区分大小写完全匹配? 例如 : 搜索栏:“标题” 当前输出:

  1. 标题
  2. 标题
  3. TITLE,
  4. 我只想先(标题)。如何解决这个问题。

    我在java中的代码:

    QueryBuilder qbString = null;

    qbString = QueryBuilders.queryString( “标题”)字段( “FIELD_NAME”);

2 个答案:

答案 0 :(得分:2)

您需要配置映射/文本处理,以便对标记进行索引而不会降低标记。

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

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

答案 1 :(得分:0)

对于ElasticSearch上的版本5 +,没有分析的概念,也没有分析索引,它是由类型驱动的!

不推荐使用字符串数据类型,并将其替换为text和keyword,因此,如果您的数据类型为text,则其行为类似于字符串,可以进行分析和标记化。

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

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

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

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"}
            }
          }
        }
      }
    }
  }