对于类似" w1 w2 w3"的搜索我只想检索包含一些查询术语但不再包含的文档。所以文件包含" w1"," w2"," w3"," w1 w2"," w1 w3", " w2 w3"或" w1 w2 w3"没关系,但不是包含" w1 w2 w3 w4"的文件。我很容易通过编程来做到这一点但是想用ElasticSearch =>做有什么想法吗?
答案 0 :(得分:0)
{
"query_string": {
"query": "(w1 OR w2 OR w3 OR (w1 AND w2) OR (w1 AND w3) OR (w2 AND W3)
OR (w1 AND w2 AND w3))"
}
}
OR
{
"query_string": {
"query": "(w1 OR w2 OR w3) AND NOT w4)"
}
}
或使用bool查询:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
{
"bool": {
"should": { "match": "w1 w2 w3" },
"must_not": { "match": "w4" }
}
}
与es保持乐趣; - )
好的,在你发表评论后我更了解你想做什么。您可以使用正则表达式查询字符串查询: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_regular_expressions
{
"query_string":{
"query":"/(w1|w2|w3|)(w1|w2|w3|)(w1|w2|w3)(w1|w2|w3|)(w1|w2|w3|)/"
}
}
这个也会匹配w1,w1,w1,w1,w1,所以你必须玩一下它。我希望这个想法足够你可以继续。你必须创建一个符合你需求的正则表达式,我的想法只是一个简短的想法: - )