【发布时间】:2019-02-26 21:01:01
【问题描述】:
在尝试创建只能匹配整个短语但也允许使用通配符的查询时,我遇到了一些困难。
基本上我有一个包含一个字符串的文件(它实际上是一个字符串列表,但为简单起见,我跳过了它),它可以包含空格或为空,我们称之为“颜色”。
例如:
{
...
"color": "Dull carmine pink"
...
}
我的查询需要能够执行以下操作:
- 搜索空值(包括和不包括)
- 搜索非空值(包括和不包括)
- 仅搜索和匹配整个短语(包括和不包括)。例如:
- 沉闷的胭脂红 --> 搭配
- 胭脂红-->不匹配
- 与上一个相同,但使用通配符(包括和排他)。例如:
- ?ull carmine p* --> 匹配“Dull carmine pink”
- dull carmine* -> 匹配“Dull carmine pink”
- 等
这几天我一直在碰壁,我几乎尝试了我能想到的所有类型的查询。
在this topic 的帮助下,我只能通过 span_near 查询使其部分工作。
所以基本上我现在可以了:
-
搜索带有/不带有通配符的整个短语,如下所示:
{ "span_near": { "clauses": [ { "span_term": {"color": "dull"} }, { "span_term": {"color": "carmine"} }, { "span_multi": {"match": {"wildcard": {"color": "p*"}}} } ], "slop": 0, "in_order": true } } -
通过简单的 must/must_not 查询来搜索空值(包括和排除),如下所示:
{ "must" / "must_not": {'exist': {'field': 'color'}} }
问题: 我找不到进行排他跨度查询的方法。我能找到的唯一方法是this。但它需要包含和排除字段,我只是想排除一些字段,必须返回所有其他字段。是否有一些类似“match_all”:{} 查询可以在 span_not 的包含字段中工作?或者也许是一个全新的、更优雅的解决方案?
【问题讨论】:
标签: html elasticsearch wildcard phrase