gpt4 book ai didi

elasticsearch - Elasticsearch使用不同的 bool 值查询多种类型

转载 作者:行者123 更新时间:2023-12-03 01:56:05 32 4
gpt4 key购买 nike

我有一个包含3种不同类型内容的索引:['media','group',user'],我需要对三种类型的内容进行搜索,但是需要一些额外的参数,其中一个参数必须先完成添加到结果列表。

这是我当前的索引数据:

{
"settings": {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": {
"media": {
"_all": {
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
},
"properties": {
"UID": {
"type": "integer",
"include_in_all": false
},
"addtime": {
"type": "integer",
"include_in_all": false
},
"title": {
"type": "string",
"index": "not_analyzed"
}
}
},
"group": {
"_all": {
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
},
"properties": {
"UID": {
"type": "integer",
"include_in_all": false
},
"name": {
"type": "string",
"index": "not_analyzed"
},
"desc": {
"type": "string",
"include_in_all": false
}
}
},
"user": {
"_all": {
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
},
"properties": {
"addtime": {
"type": "integer",
"include_in_all": false
},
"username": {
"type": "string"
}
}
}
}
}

所以目前我可以使用
{
query: {
match: {
_all: {
"query": "foo",
"operator": "and"
}
}
}
}

并获取带有单词“foo”的媒体,组或用户的结果,这很棒,但是我需要使其删除用户不是结果所有者的所有媒体。因此,我想我需要在bool查询中设置“必须”子句,然后将“UID”变量添加到当前用户ID是什么。

我的问题是如何执行此操作以及如何指定过滤器仅对一种类型起作用而对其他类型保持不变。

我无法在Elastic Search文档中找到答案

最佳答案

最后,我能够按照Andrei的评论来完成。我知道这不是完美的,因为我必须为“group”和“user”类型添加一个should,但是它与我的设计完美契合,因为我也需要在它们上放置更多过滤器。请注意,搜索最终将变慢。

curl -X GET 'http://localhost:9200/foo/_search' -d '
{
"query": {
"bool" :
{
"must" :
{
"query" : {
"match" :
{
"_all":
{
"query" : "test"
}
}
}
},
"filter":
{
"bool":
{
"should":
[{
"bool" : {
'must':
[{
"type":
{
"value": "media"
}
},
{
'bool':
{
"should" : [
{ "term" : {"UID" : 2}},
{ "term" : {"type" : "public"}}
]
}
}]
}
},
{
"bool" : {
"should" : [
{ "type" : {"value" : "group"}},
{ "type" : {"value" : "user"}}
]
}
}]
}
}
}
}
}'

关于elasticsearch - Elasticsearch使用不同的 bool 值查询多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553219/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com