【问题标题】:ElasticSearch matching no more than query termsElasticSearch 匹配不超过查询词
【发布时间】:2014-11-13 14:37:53
【问题描述】:

对于像“w1 w2 w3”这样的搜索,我只想检索包含一些查询词但没有更多的文档。所以包含“w1”、“w2”、“w3”、“w1 w2”、“w1 w3”、“w2 w3”或“w1 w2 w3”的文档是可以的,但不是包含“w1 w2 w3 w4”的文档.我通过编程很容易做到了,但想用 ElasticSearch 做到这一点 => 有什么想法吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    使用查询字符串查询: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))"
        }
    }
    

    {
        "query_string": {
          "query": "(w1 OR w2 OR w3) AND NOT w4)"
        }
    }
    

    或使用布尔查询: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,所以你必须尝试一下。我希望这个想法足够你可以继续。您必须创建一个符合您需求的正则表达式,我的想法只是一个简短的想法:-)

    【讨论】:

    • 感谢您的帮助 Gizzmo,但它不起作用: - 选项 1:返回包含 w4 的结果 - 选项 2 和 3:实际上,w4 代表“任何其他不是 w1 或 w2 的词也不是 w3",所以它属于一个可能无限的词集,所以不可能把词的洞列表排除在外(也许我不清楚这一点,对不起)
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多