ElasticSearch匹配不超过查询字词

时间:2014-11-13 14:37:53

标签: elasticsearch

对于类似" w1 w2 w3"的搜索我只想检索包含一些查询术语但不再包含的文档。所以文件包含" w1"," w2"," w3"," w1 w2"," w1 w3", " w2 w3"或" w1 w2 w3"没关系,但不是包含" w1 w2 w3 w4"的文件。我很容易通过编程来做到这一点但是想用ElasticSearch =>做有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用查询字符串查询:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

{
    "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,所以你必须玩一下它。我希望这个想法足够你可以继续。你必须创建一个符合你需求的正则表达式,我的想法只是一个简短的想法: - )