并非所有术语都适用于ElasticSearch Query

时间:2016-08-02 18:42:46

标签: elasticsearch

我没有看到https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

所述的使用字词搜索时我预期的结果

ElasticSearch版本是2.3.2:使用它来创建数据:

curl -XPUT http://myelastic:9201/myindex/mytype/90273504?pretty=true -d '{ "CLIENT_ID" : "000000001", "USER_TYPE" : "ABC"}'
curl -XPUT http://myelastic:9201/myindex/mytype/90273505?pretty=true -d '{ "CLIENT_ID" : "000000002", "USER_TYPE" : "ABC"}'

此查询显示两个记录:

curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" -d '{ "query" : { "match_all" : { } } }'

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "myindex",
      "_type" : "mytype",
      "_id" : "90273505",
      "_score" : 1.0,
      "_source" : {
        "CLIENT_ID" : "000000002",
        "USER_TYPE" : "ABC"
      }
    }, {
      "_index" : "myindex",
      "_type" : "mytype",
      "_id" : "90273504",
      "_score" : 1.0,
      "_source" : {
        "CLIENT_ID" : "000000001",
        "USER_TYPE" : "ABC"
      }
    } ]
  }
}

此查询按预期显示一条记录:

curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
    -d '{ "query" : { "bool" : { "should" : [ { "term" : { "CLIENT_ID" : "000000001" } } ] } } }'

但是使用不同的术语会导致没有记录:

curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
    -d '{ "query" : { "bool" : { "should" : [ { "term" : { "USER_TYPE" : "ABC" } } ] } } }'

最终,我想基于多个条款的匹配对记录进行评分,从多个条款的选择开始,如下所示:

curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
    -d '{ "query" : { "bool" : { "should" : [ { "term" : { "CLIENT_ID" : "000000001" } }, { "term" : { "USER_TYPE" : "ABC" } } ] } } }'

但是现在我试图理解为什么

curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
    -d '{ "query" : { "bool" : { "should" : [ { "term" : { "USER_TYPE" : "ABC" } } ] } } }'

不返回任何记录。

1 个答案:

答案 0 :(得分:2)

  

标准分析仪

     

标准分析仪是默认的分析仪   Elasticsearch使用。它是分析文本的最佳选择   可能是任何语言。它将文本分割为单词边界,如   由Unicode Consortium定义,并删除大多数标点符号。   最后,它会缩小所有条款。

https://www.elastic.co/guide/en/elasticsearch/guide/current/analysis-intro.html#_built_in_analyzers

尝试搜索小写文字。我认为它适用于数字,因为它们没有案例。

curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
    -d '{ "query" : { "bool" : { "should" : [ { "term" : { "USER_TYPE" : "abc" } } ] } } }'

This thread could help