仅返回部分术语的 ElasticSearch 查询

ElasticSearch Query with only partial term returned

我正在通过javascript搜索Elasticsearch,主要只是做一个非常简单的趋势分析。我想看的是世界上哪个国家的汉堡卖得最多。问题是我没有看到美国、英国 returned,而是得到 "united",因为这两个结果显然都出现了该术语。如何查询到 return 完整的国家名称?不只是州,还是美国?

我在 ES 中进行简单搜索的数据如下所示:

"country": "United States",
"place_name": "United States",
"hSold": "27",

我在 JS 中的查询:

esClient.search({
        index: 'burgers',
        size: 20,
        body: {
            // Begin query.
            query: {
                "match_all" : {}               
            },
            // Aggregate on the results
            facets: {
                  tagcloud: {
                    terms: {
                      field: 'country', 'size': 20                       
                    }
                  }
                }
            // End query.
        }

我看到的结果:

United: 1047
States: 987
south: 870
kingdom: 600

我应该有美国那样的结果,而不是团结。

非常感谢任何帮助。

谢谢

您需要在映射的 "country" 字段中设置 "index":"not_analyzed"。值得花一些时间研究如何 analysis works in Elasticsearch, but the basic idea is that if you do not specify an analyzer in your mapping definition, Elasticsearch will use the default standard analyzer,这将为字段中的每个单词创建一个小写标记。

作为一个更具体的例子,我可以像这样设置一个索引(我使用的是 "Sense" 语法;我假设你可以将它翻译成你需要的 JavaScript):

DELETE /test_index

PUT /test_index
{
   "mappings": {
      "doc": {
         "properties": {
            "country": {
               "type": "string",
               "index": "not_analyzed"
            },
            "place_name": {
               "type": "string"
            },
            "h_sold": {
               "type": "integer"
            }
         }
      }
   }
}

然后添加几个文档:

PUT /test_index/doc/1
{
   "country": "United States",
   "place_name": "United States",
   "hSold": 27
}

PUT /test_index/doc/2
{
   "country": "United Kingdom",
   "place_name": "United Kingdom",
   "hSold": 25
}

然后我可以在 "country" 字段上使用 terms aggregation

POST /test_index/_search?search_type=count
{
    "aggs": {
       "countries": {
          "terms": {
             "field": "country",
             "size": 10
          }
       }
    }
}

返回我期望的结果:

{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "countries": {
         "buckets": [
            {
               "key": "United Kingdom",
               "doc_count": 1
            },
            {
               "key": "United States",
               "doc_count": 1
            }
         ]
      }
   }
}

(您可以使用分面代替聚合,尽管分面已被弃用。)

这是我使用的代码:

http://sense.qbox.io/gist/dbbcc9f8298e82e6043a0636ff9742c2e11f107f