#elasticsearch
Вопрос:
Я хотел бы найти продукт с приоритетом поиска : pickRef, имя, синоним (это массив) и другие после. Мне не удается получить рабочий запрос.. Я должен увеличить синоним на «50», чтобы продукт попал в топ-8 результатов…
Цель моего запроса состоит в том, чтобы выполнить автоматический поиск с нечетким заполнением (чтобы избежать неправильного толкования)
У меня есть продукт с синонимом «caca», когда я хочу выполнить поиск «caca» и вернуть все продукты coca. но не продукт с синонимом «кака». Однако термин «caca» должен быть первым результатом, потому что он идеально соответствует полю синонимов, а продукты coca-cola должны следовать за ним (из-за нечеткого параметра).
Вот мой указатель :
{ "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" } } ] } } } }
Those are my products :
{ "_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 amp; 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": "lt;divgt;Boîte de 1000 agrafes 26/6 galvanisées.lt;/divgt;" }, "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 : Я знаю, что пример не идеален, но у меня нет лучшего…
Ответ №1:
вы пытаетесь отсортировать по _счетам?
{ "index": "product", "size": 8, "body": { "query": { . . . }, "sort": [ { "_score": { "order": "desc" } } ] } }
Комментарии:
1. Я постараюсь поблагодарить вас за ваш ответ 🙂