弹性搜索查找所有文档在字段

时间:2015-11-13 02:16:47

标签: elasticsearch

我想知道如何搜索所有包含字符串字符串的文档。

我正在寻找一个在单词之前和之后使用带*的通配符的解决方案。 但它不好,因为它还检索包含包含该字符串的更大单词的文档。 https://www.elastic.co/guide/en/elasticsearch/guide/current/_wildcard_and_regexp_queries.html 即如果我搜索"新闻" 结果可以包含"维基新闻"这不是我想要的。

我的索引定义如下:

PUT /index
{
   "mappings" : {
          "text" : {
             "properties" : {
                "text" : { "type" : "string", "index" : "not_analyzed" },
                "url" : { "type" : "string"}
             }
          }
   }
}

我想搜索特定单词将出现在&text;'文本中的文档。领域 编辑: 示例数据:

 curl -XPUT 'http://localhost:9200/index/type/1' -d '
{ 
   "url": "wikipedia.com", 
   "Text": "in the news", 

}'

 curl -XPUT 'http://localhost:9200/index/type/2' -d '
{ 
   "url": "wikipedia.com", 
   "Text": "Click here for Wikinews", 

}'

 curl -XPUT 'http://localhost:9200/index/type/3' -d '
{ 
   "url": "wikipedia.com", 
   "Text": "news for each page are those:", 

}'


curl -XPUT 'http://localhost:9200/index/type/4' -d '
{ 
   "url": "wikipedia.com", 
   "Text": "What are the news means to you", 

}'

curl -XPUT 'http://localhost:9200/index/type/5' -d '
{ 
   "url": "walla.com", 
   "Text": "today News are more ...", 

}'

这应该返回文件1,3,4,5 文档5,因为搜索不区分大小写。 文件2不包括在内,因为它不是新闻这个词,它是更大词的一部分,不相关

感谢帮助者

1 个答案:

答案 0 :(得分:2)

首先,您需要删除"index" : "not_analyzed",因为您需要不区分大小写的搜索。 "index" : "not_analyzed"将对该单词进行索引,然后搜索“新闻”一词并不会为您提供文档5.

{
   "mappings" : {
          "text" : {
             "properties" : {
                "text" : { "type" : "string"},
                "url" : { "type" : "string"}
             }
          }
   }
}

我使用的是默认standard analyzer,因为我没有指定任何分析器。您可以了解有关ElasticSearch Analysis Here的更多信息。

之后,一个简单的match query就足以获得所有想要的文件。

{
  "query": {
    "match": {
      "text": "news"
    }
  }
}

如果您想要短语搜索,可以将匹配查询替换为match_phrase查询。