Elasticsearch:字段上的查询字符串

时间:2014-02-19 21:34:22

标签: elasticsearch

有人可以判断我是对还是错,检查标题字段是否包含项目


curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
    "query": {
        "query_string": { 
           "query": "title:Item"
        }
    }
}'

修改

我有一个像“经济学和统计学”这样的标题

这个会返回一条记录


curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
    "query": {
        "query_string": { 
           "query": "title:*statistics*"
        }
    }
}'

这个不会返回任何内容


curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
    "query": {
        "query_string": { 
           "query": "title:statistics"
        }
    }
}'

这个也不会返回任何内容(奇怪)


curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
    "query": {
        "query_string": { 
           "query": "title:*Economics*"
        }
    }
}'

医生说:

状态字段 包含 有效

status:active

4 个答案:

答案 0 :(得分:1)

you can mention a particular field in default_field

{
    "query_string" : {
        "default_field" : "content",
        "query" : "this AND that OR thus"
    }
}

if you want to specify more than one field then 

{
    "query_string" : {
        "fields" : ["content", "name"],
        "query" : "this AND that"
    }
}

答案 1 :(得分:0)

对于像我这样面对ES问题的初学者:要非常小心如何映射/标记数据。 “not_analyzed”并不意味着我认为它意味着什么,并引导我解决上述问题。

答案 2 :(得分:-1)

您的查询看起来不错。但你也可以通过以下查询来实现相同的目标。

curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
   "query": {
      "term": {
         "title": {
            "value": "Item"
         }
      }
   }
}'

在研究elasticsearch查询优化的过程中,我发现建议在必要时避免使用query_string。默认情况下,query_string也不会被缓存。

Reference Article

答案 3 :(得分:-1)

curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
    "query": {
        "match": { 
           "title": "statistics"
        }
    }
}'

如果您想搜索确切的术语(不是该字段的确切内容),这就足够了。尽量避免使用通配符,因为它很昂贵。要在字段中搜索一小部分单词,您必须根据需要修改映射。

检查您的地图并查看标题字段的类型。如果未进行分析,请将其重新编入索引已分析(默认情况下)。