我试图在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的新手
答案 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"
}
}
}
}
}