【问题标题】:ElasticSearch query relevanceElasticSearch 查询相关性
【发布时间】:2021-12-03 13:11:00
【问题描述】:

我想找到具有搜索优先级的产品:pickRef、名称、同义词(它是一个数组)和其他的。我没有成功进行有效的查询。我必须提升“50”的同义词才能使产品进入前 8 名结果...

我的查询的目的是使用模糊进行自动完成搜索(以避免拼写错误)

我有一个具有同义词“caca”的产品当我想搜索“caca”时,ES 会返回所有 coca 产品。但不是具有同义词“caca”的产品。但是,术语“caca”必须是第一个结果,因为它与同义词字段完美匹配,并且 coca 产品必须紧随其后(由于模糊参数)

有我的索引:

{
    "product": {
        "aliases": {},
        "mappings": {
            "properties": {
                "brand": {
                    "type": "keyword",
                    "boost": 3
                },
                "catalogue": {
                    "type": "keyword"
                },
                "category": {
                    "type": "text",
                    "analyzer": "standard"
                },
                "description": {
                    "properties": {
                        "de": {
                            "type": "text",
                            "boost": 3,
                            "analyzer": "german"
                        },
                        "en": {
                            "type": "text",
                            "boost": 3,
                            "analyzer": "english"
                        },
                        "fr": {
                            "type": "text",
                            "boost": 3,
                            "analyzer": "french"
                        },
                        "lu": {
                            "type": "text",
                            "boost": 3
                        }
                    }
                },
                "description_ecology": {
                    "properties": {
                        "de": {
                            "type": "text",
                            "boost": 3,
                            "analyzer": "german"
                        },
                        "en": {
                            "type": "text",
                            "boost": 3,
                            "analyzer": "english"
                        },
                        "fr": {
                            "type": "text",
                            "boost": 3,
                            "analyzer": "french"
                        },
                        "lu": {
                            "type": "text",
                            "boost": 3
                        }
                    }
                },
                "enabled": {
                    "type": "boolean"
                },
                "image": {
                    "type": "text"
                },
                "name": {
                    "properties": {
                        "de": {
                            "type": "text",
                            "boost": 3,
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            },
                            "analyzer": "german"
                        },
                        "en": {
                            "type": "text",
                            "boost": 3,
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            },
                            "analyzer": "english"
                        },
                        "fr": {
                            "type": "text",
                            "boost": 3,
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            },
                            "analyzer": "french"
                        },
                        "lu": {
                            "type": "text",
                            "boost": 3,
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "pickRef": {
                    "type": "keyword",
                    "boost": 5
                },
                "replaced": {
                    "type": "boolean"
                },
                "slug": {
                    "type": "text"
                },
                "synonym": {
                    "type": "keyword",
                    "boost": 3
                }
            }
        },
        "settings": {
            "index": {
                "routing": {
                    "allocation": {
                        "include": {
                            "_tier_preference": "data_content"
                        }
                    }
                },
                "number_of_shards": "1",
                "provided_name": "product",
                "creation_date": "1634287857507",
                "analysis": {
                    "filter": {
                        "autocomplete_filter": {
                            "type": "edge_ngram",
                            "min_gram": "1",
                            "max_gram": "20"
                        }
                    },
                    "analyzer": {
                        "autocomplete": {
                            "filter": [
                                "lowercase",
                                "autocomplete_filter"
                            ],
                            "type": "custom",
                            "tokenizer": "standard"
                        }
                    },
                    "char_filter": {
                        "pre_negs": {
                            "pattern": "a \\w",
                            "type": "pattern_replace",
                            "replacement": ""
                        }
                    }
                },
                "number_of_replicas": "0",
                "uuid": "EGLmpv8bRlCnfLBxHZOKmA",
                "version": {
                    "created": "7150099"
                }
            }
        }
    }
}

有我的疑问:

{
    "index": "product",
    "size": 8,
    "body": {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "enabled": true
                        }
                    },
                    {
                        "match": {
                            "replaced": false
                        }
                    }
                ],
                "should": [
                    {
                        "match": {
                            "name.fr": {
                                "query": "caca",
                                "analyzer": "standard"
                            }
                        }
                    },
                    {
                        "match": {
                            "synonym": {
                                "query": "caca",
                                "boost": 20,
                                "analyzer": "standard"
                            }
                        }
                    },
                    {
                        "multi_match": {
                            "query": "caca",
                            "fields": [
                                "brand^2",
                                "pickRef^5",
                                "catalogue",
                                "name.fr^3",
                                "name.en^1",
                                "name.de^1",
                                "name.lu^1",
                                "description.fr^1",
                                "description.en^1",
                                "description.de^1",
                                "description.lu^1",
                                "description_ecologique.fr^1",
                                "description_ecologique.en^1",
                                "description_ecologique.de^1",
                                "description_ecologique.lu^1"
                            ],
                            "fuzziness": "AUTO"
                        }
                    },
                    {
                        "query_string": {
                            "query": "caca"
                        }
                    }
                ]
            }
        }
    }
}

这些是我的产品:

{
    "_index": "product",
    "_type": "_doc",
    "_id": "1594",
    "_version": 1,
    "_seq_no": 1593,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "name": {
            "fr": "PLANTE ARTIFICIELLE BAMBOU 120cm"
        },
        "pickRef": "122638",
        "description": {
            "fr": "Agrémentez votre lieu de travail avec cette superbe plante ! Elle garantit un environnement très naturel, ne nécessite pas d'entretien et agrémente n'importe quel espace. Tronc en bois, feuillage en polyester , livrée dans un pot standard en plastique."
        },
        "description_ecology": {
            "fr": ""
        },
        "catalogue": "P399",
        "image": "uploads/product/122638/122638.png",
        "brand": "PAPERFLOW",
        "category": "Autres",
        "slug": "plante-artificielle-bambou-120cm-122638-122638",
        "enabled": true,
        "synonym": [],
        "replaced": false
    }
}

{
    "_index": "product",
    "_type": "_doc",
    "_id": "3131",
    "_version": 1,
    "_seq_no": 3130,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "name": {
            "fr": "ROYCO MINUTE SOUP \"POIS AU JAMBON\""
        },
        "pickRef": "141065",
        "description": {
            "fr": "Retrouvez le bon goût des légumes dans ces recettes de tradition alliant tout le savoir-faire de Royco Minute Soup à la saveur des meilleurs ingrédients."
        },
        "description_ecology": {
            "fr": ""
        },
        "catalogue": "P038",
        "image": "uploads/product/141065/141065.png",
        "brand": "ROYCO",
        "category": "Soupe & pâtes",
        "slug": "royco-minute-soup-pois-au-jambon-5410056186552-141065",
        "enabled": true,
        "synonym": [],
        "replaced": false
    }
}

{
    "_index": "product",
    "_type": "_doc",
    "_id": "6",
    "_version": 2,
    "_seq_no": 24511,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "name": {
            "fr": "AGRAFES 26/6 GALVANISEES"
        },
        "pickRef": "100110",
        "description": {
            "fr": "<div>Boîte de 1000 agrafes 26/6 galvanisées.</div>"
        },
        "description_ecology": {
            "fr": null
        },
        "catalogue": "S",
        "image": "uploads/product/233163/233163.png",
        "brand": "autres",
        "category": "Autres",
        "slug": "agrafes-26-6-galvanisees-jambon-5010255827746-100110",
        "enabled": true,
        "synonym": [
            "caca",
            "jambon"
        ],
        "replaced": false
    }
}

PS:我知道这个例子并不完美,但我没有更好的例子......

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您是否尝试按 _score 排序?

    {
        "index": "product",
        "size": 8,
        "body": {
            "query": {
                .
                .
                .
            },
            "sort": [
                {
                    "_score": {
                        "order": "desc"
                    }
                }
            ]
        }
    }
    

    【讨论】:

    • 我会尽力感谢您的回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多