Elasticsearch数组查询/过滤

Mat*_*nty 2 arrays filter elasticsearch

我是第一次看Elasticsearch,花了大约一天的时间来看待它.我们已经广泛使用Lucene并且想要开始使用ES.我正在寻找我们目前拥有的替代数据结构.

如果我运行*match_all*查询,这就是我现在得到的.我很满意这个结构.

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 22,
      "max_score": 1,
      "hits": [
         {
            "_index": "integration-test-static",
            "_type": "sport",
            "_id": "4d38e07b-f3d3-4af2-9221-60450b18264a",
            "_score": 1,
            "_source": {
               "Descriptions": [
                  {
                     "FeedSource": "dde58b3b-145b-4864-9f7c-43c64c2fe815",
                     "Value": "Football"
                  },
                  {
                     "FeedSource": "e4b9ad44-00d7-4216-adf5-3a37eafc4c93",
                     "Value": "Football"
                  }
               ],
               "Synonyms": [
                  "Football"
               ]
            }
         }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是如何编写查询以通过搜索同义词"Football"来撤回此文档.看起来应该很容易!

读完这篇文章后我得到了这个方法:http://gibrown.wordpress.com/2013/01/24/elasticsearch-five-things-i-was-doing-wrong/ 他提到在数组中存储多个字段.我意识到我的例子没有多个字段,但我们肯定会寻找一个可以满足它们的解决方案.

尝试了各种不同的查询与过滤器,bool的东西,术语这个和术语,没有回报.

Ale*_*vik 5

你的搜索和映射是什么样的?

如果让Elasticsearch生成映射,它将使用标准分析器来降低文本(并删除停用词).

因此,Football实际上将被编入索引football.该term查询-家庭/过滤器不会做文本分析,所以term:Football会寻找Football,未编入索引.该match查询-家庭做.

这是一个非常常见的问题,在我的关于针对初学者的Elasticsearch搜索疑难解答的文章中有相当广泛的介绍,值得浏览.文本分析是使用搜索的一个非常重要的部分,因此还有更多关于它的文章.