我在弹性搜索中使用过滤器(我们使用旧版本1.3.1),我需要按任何字段过滤搜索结果。通过查询,可以这样做:
"query": {
"query_string": {
"query": "_all:test"
}
}
但过滤器似乎无法与 _all 语句一起使用。我能做什么?更新的弹性搜索版本会解决我的问题吗?
提前致谢!
PS:我需要搜索确切的值,因此我无法使用查询。查询和过滤器之间存在差异 - 如果您搜索my brown
,则可以获得以下结果:
my brown
This is my brown dog.
someone stolen my brown wallet
但过滤器只返回my brown
,这就是我需要的。
答案 0 :(得分:1)
您可能想要了解queries and filters之间的区别。你在那里做的是query string query。
如果您确实希望过滤精确的文本标记(如果您不知道“标记”的含义,请在analysis上阅读),并且您的映射设置为{{{ 3}}表现得像你期待的那样尝试这样的事情:
POST /test_index/_search
{
"query": {
"filtered": {
"filter": {
"term": {
"_all": "test"
}
}
}
}
}
另一方面,如果您想允许某些分析(例如,"Test"
被标记化为"test"
),您可能需要这样做:
POST /test_index/_search
{
"query": {
"match": {
"_all": "Test"
}
}
}
以下是我用来玩它的一些代码: