一次查询中每个映射的不同多重匹配
Different multi match for each mapping in one query
我有 4 个不同的映射:A
、B
、C
和 D
。
对于映射 A
和 B
,以下查询给出了最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "keyword",
"fuzziness": "AUTO",
"fields": ["name*"]
}
}
]
}
}
]
}
},
"from": 0,
"size": 20
}
对于 C
,以下查询给出了最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": "AUTO",
"use_dis_max": false,
"fields": ["name*"]
}
}
]
}
}
]
}
}
}
而对于 D
,以下查询给出了最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": 0,
"use_dis_max": false,
"fields": ["name*"]
}
},
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": 3,
"fields": ["name*"]
}
}
]
}
}
]
}
}
}
我可以进行 3 个单独的查询并处理结果,但事实证明它很混乱并且需要更长的时间。是否可以将这 3 个查询组合成一个并说 mapping/types A
和 B
使用第一个多重匹配 C
使用第二个 D
使用第三个。
我使用 Type Query 得出了以下结果。
为了简单起见,我只考虑了问题中提到的 C
和 D
类型的查询。
请注意,我还包含了 boost
参数,并且我提到它的方式是,与 C
类型的文档相比,C
类型的文档在结果中总是显得更高=12=]。
您可以继续根据您的要求进行更改。
查询
POST <your_index_name>/_search
{
"query":{
"bool":{
"should":[
{
"bool":{
"boost":100,
"must":[
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":"AUTO",
"use_dis_max":false,
"fields":[
"name*"
]
}
},
{
"type":{
"value":"C"
}
}
]
}
},
{
"bool":{
"boost":5,
"must":[
{
"type":{
"value":"D"
}
},
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":0,
"use_dis_max":false,
"fields":[
"name*"
]
}
},
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":3,
"fields":[
"name*"
]
}
}
]
}
}
]
}
}
}
如果有帮助请告诉我!
我有 4 个不同的映射:A
、B
、C
和 D
。
对于映射 A
和 B
,以下查询给出了最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "keyword",
"fuzziness": "AUTO",
"fields": ["name*"]
}
}
]
}
}
]
}
},
"from": 0,
"size": 20
}
对于 C
,以下查询给出了最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": "AUTO",
"use_dis_max": false,
"fields": ["name*"]
}
}
]
}
}
]
}
}
}
而对于 D
,以下查询给出了最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": 0,
"use_dis_max": false,
"fields": ["name*"]
}
},
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": 3,
"fields": ["name*"]
}
}
]
}
}
]
}
}
}
我可以进行 3 个单独的查询并处理结果,但事实证明它很混乱并且需要更长的时间。是否可以将这 3 个查询组合成一个并说 mapping/types A
和 B
使用第一个多重匹配 C
使用第二个 D
使用第三个。
我使用 Type Query 得出了以下结果。
为了简单起见,我只考虑了问题中提到的 C
和 D
类型的查询。
请注意,我还包含了 boost
参数,并且我提到它的方式是,与 C
类型的文档相比,C
类型的文档在结果中总是显得更高=12=]。
您可以继续根据您的要求进行更改。
查询
POST <your_index_name>/_search
{
"query":{
"bool":{
"should":[
{
"bool":{
"boost":100,
"must":[
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":"AUTO",
"use_dis_max":false,
"fields":[
"name*"
]
}
},
{
"type":{
"value":"C"
}
}
]
}
},
{
"bool":{
"boost":5,
"must":[
{
"type":{
"value":"D"
}
},
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":0,
"use_dis_max":false,
"fields":[
"name*"
]
}
},
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":3,
"fields":[
"name*"
]
}
}
]
}
}
]
}
}
}
如果有帮助请告诉我!