如何在同一请求中查询具有不同查询词的两个不同字段。弹性搜索 5.x
How to query two different fields with different query terms in same request. ElasticSearch 5.x
ElasticSearch 的新手 - 开始爱上它。我正在开发一个 Rails 应用程序(使用 elasticsearch-rails / elasticsearch-model)。
我有两个字段 - 都是由标签组成的字符串。
about_me & about_you
- 现在我要用当前用户about_me查询另一个用户的about_you。
- 同时,我想用当前用户的about_you查询其他用户的about_me。
这有意义吗?就像两个字段,两个查询,每个查询都针对一个特定的字段。
我只需要提示如何在 ES 中实现这一点。为了完整起见,这是我在 rails 模型中创建的部分方法 - 它不完整:
def home_search(query_you, query_me)
search_definition =
{
query: {
multi_match: {
query: query_me,
fields: ['about_you']
}
..... SOMETHINGs MISSING HERE ..... ?
},
suggest: {
text: query,
about_me: {
term: {
size: 1,
field: :about_me
}
},
about_you: {
term: {
size: 1,
field: :about_you
}
}
}
}
self.class.__elasticsearch__.search(search_definition)
end
欢迎任何帮助,link 或捐款。谢谢!
我不确定我是否理解你的问题,但我可以建议两个选项:
首先使用 should
和 minimum_should_match=1
类型的 bool query
。在这种情况下,您可以为您的搜索编写两个查询。如果你想区分结果,你可以在每个查询中传递一个 _name
参数。像这样:
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"multi_match": {
"query": "query_me",
"fields": [
"about_you"
],
"_name": "about_you"
}
},
{
"multi_match": {
"query": "query_you",
"fields": [
"about_me"
],
"_name": "about_you"
}
}
]
}
}
}
通过提供 _name
,您可以查看在搜索结果中命中了哪些查询。
第二种方法可以是 _msearch
查询,您可以在其中将多个查询传递到端点并取回结果。
以下是一些有用的链接:
ElasticSearch 的新手 - 开始爱上它。我正在开发一个 Rails 应用程序(使用 elasticsearch-rails / elasticsearch-model)。
我有两个字段 - 都是由标签组成的字符串。
about_me & about_you
- 现在我要用当前用户about_me查询另一个用户的about_you。
- 同时,我想用当前用户的about_you查询其他用户的about_me。
这有意义吗?就像两个字段,两个查询,每个查询都针对一个特定的字段。
我只需要提示如何在 ES 中实现这一点。为了完整起见,这是我在 rails 模型中创建的部分方法 - 它不完整:
def home_search(query_you, query_me)
search_definition =
{
query: {
multi_match: {
query: query_me,
fields: ['about_you']
}
..... SOMETHINGs MISSING HERE ..... ?
},
suggest: {
text: query,
about_me: {
term: {
size: 1,
field: :about_me
}
},
about_you: {
term: {
size: 1,
field: :about_you
}
}
}
}
self.class.__elasticsearch__.search(search_definition)
end
欢迎任何帮助,link 或捐款。谢谢!
我不确定我是否理解你的问题,但我可以建议两个选项:
首先使用 should
和 minimum_should_match=1
类型的 bool query
。在这种情况下,您可以为您的搜索编写两个查询。如果你想区分结果,你可以在每个查询中传递一个 _name
参数。像这样:
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"multi_match": {
"query": "query_me",
"fields": [
"about_you"
],
"_name": "about_you"
}
},
{
"multi_match": {
"query": "query_you",
"fields": [
"about_me"
],
"_name": "about_you"
}
}
]
}
}
}
通过提供 _name
,您可以查看在搜索结果中命中了哪些查询。
第二种方法可以是 _msearch
查询,您可以在其中将多个查询传递到端点并取回结果。
以下是一些有用的链接: