elasticsearch中的完全匹配查询

时间:2015-12-19 13:37:24

标签: elasticsearch

我试图在ES中运行完全匹配的查询

在MYSQL中

我的查询是:

SELECT * WHERE `content_state`='active' AND `author`='bob' AND `title` != 'Beer';

我在这里查看了ES文档:

https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html

并想出了这个:

{
"from" : '.$offset.', "size" : '.$limit.',
"filter": {
"and": [
  {
    "and": [
      {
        "term": {
          "content_state": "active"
        }
      },
      {
        "term": {
          "author": "bob"
        }
      },
      {
        "not": {
          "filter": {
            "term": {
              "title": "Beer"
            }
          }
        }
      }
    ]
  }
    ]
  }
}

但是我的结果仍然以标题=啤酒回归,它似乎并没有排除那些=啤酒的标题。

我做错了吗?

我是ES的新手

3 个答案:

答案 0 :(得分:1)

我想通了,我用了这个......

{
 "from" : '.$offset.', "size" : '.$limit.',
  "query": {
   "bool": {
   "must": [
    {
      "query_string": {
        "default_field": "content_state",
        "query": "active"
      }
    },
    {
      "query_string": {
        "default_field": "author",
        "query": "bob"
      }
    }
  ],

  "must_not": [
    {
      "query_string": {
        "default_field": "title",
        "query": "Beer"
      }
    }
  ]




}
}
}

答案 1 :(得分:0)

Query String Query是处理搜索条件之间各种关系的一个非常好的概念。快速浏览Query string query syntax以详细了解这个概念

library(reshape2)
library(ggplot2)
tdm <- TermDocumentMatrix(crude)
df <- melt(as.matrix(tdm))
df <- df[df$Terms %in% findFreqTerms(tdm, lowfreq = 10), ]
ggplot(df, aes(as.factor(Docs), Terms, fill=log(value))) + geom_tile() + xlab("Docs") + scale_fill_continuous(low="#FEE6CE", high="#E6550D")

答案 2 :(得分:0)

如果您以标题为未分析字段的方式定义了您的映射,那么过滤器应该使用精确值,您之前的尝试(使用过滤器) )也会有效。

{
    "mappings": {
        "test": {
            "_all": {
                "enabled": false
            },
            "properties": {
                "content_state": {
                    "type": "string"
                },
                "author": {
                    "type": "string"
                },
                "title": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}