当前位置: 首页 > 知识库问答 >
问题:

弹性搜索多项滤波器

施慈
2023-03-14

我对Elasticsearch相当陌生,所以这是我的问题。我想用elasticsearch做一个搜索查询,想用多个术语过滤。

如果我想搜索用户'Tom',那么我希望获得用户'is active=1'、'is private=0'和'is owner=1'的所有匹配项。

这是我的搜索查询

"query":{
    "filtered": {
        "query": {
            "query_string": {
                "query":"*tom*",
                "default_operator": "OR",
                "fields": ["username"]
            }
        },
        "filter": {
            "term": { 
                "isActive": "1",
                "isPrivate": "0",
                "isOwner": "1"
            }
        }
    }
}   

谢谢你的帮助!!

共有1个答案

漆雕正奇
2023-03-14

您应该使用布尔过滤器所有术语:

"query":{
    "filtered": {
        "query": {
            "query_string": {
                "query":"*tom*",
                "default_operator": "OR",
                "fields": ["username"]
            }
        },
        "filter": {
            "bool" : {
                "must" : [
                    {"term" : { "isActive" : "1" } },
                    {"term" : { "isPrivate" : "0" } },
                    {"term" : { "isOwner" : "1" } }
                ]
             }
         }
     }
}   

对于2.x+版本,可以使用bool查询而不是filtered查询,只需进行一些简单的替换:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-filtered-query.html

 类似资料:
  • 我有一个关于书籍的数据集,每本书都可以是一种或多种语言的。每个用户都注册为拥有一种或多种语言。 当用户搜索书籍时,我只想返回那些他们理解所有语言的书籍。 例如,系统中有以下两本书: 如果John被注册为懂英语、德语、法语和意大利语,那么他的查询结果永远不应该包括Book B。 我的系统目前是使用Apache Solr编写的,最后我编写了一个插件来执行子集操作(如果记录的语言是用户语言的子集,则该记

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 我有个问题。在常见的购物车网站有功能搜索产品与多个过滤器。例如,我正在搜索运动装备与一些过滤器,如: > 制造商 [x]耐克 阿迪达斯 茵宝 选项 尺寸 [x]s [x]M L [x]白色 黄色 红色 [x]蓝色 这是我的地图 部分测试数据 有了这个查询,一切都很好 但是,如果我在选项过滤器中添加更多的条件,我没有得到结果 我不知道我在映射或查询中是否错了,或者您能告诉我在这种情况下创建映射的最佳

  • 作为参考,我使用的是Elasticsearch 6.4.0 我有一个Elasticsearch查询,它返回一定的命中视频数,我正在尝试删除文本字段值过于相似的命中。我的查询是: 此查询使用自定义函数分数和筛选器来返回用户可能喜欢的书籍(他们尚未创作的书籍)。对于某些人来说,它返回的名字非常相似的书(即乔治·华盛顿的一生,乔治·华盛顿的美好时光,谁是乔治·华盛顿),我希望热门歌曲有一套更多样化的名字

  • 我在研究弹性搜索查询。我不能理解这个问题: 我读过这篇文章,但不清楚:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-query.html 1-第二个“term”是什么? 2-boost的用法是什么? 3-如何使用一个或多个term进行查询: 名为“title”的字段必须包含:

  • 这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话