【发布时间】: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
对于像“w1 w2 w3”这样的搜索,我只想检索包含一些查询词但没有更多的文档。所以包含“w1”、“w2”、“w3”、“w1 w2”、“w1 w3”、“w2 w3”或“w1 w2 w3”的文档是可以的,但不是包含“w1 w2 w3 w4”的文档.我通过编程很容易做到了,但想用 ElasticSearch 做到这一点 => 有什么想法吗?
【问题讨论】:
标签: elasticsearch
{
"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,所以你必须尝试一下。我希望这个想法足够你可以继续。您必须创建一个符合您需求的正则表达式,我的想法只是一个简短的想法:-)
【讨论】: