Релевантность запроса ElasticSearch

#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. Я постараюсь поблагодарить вас за ваш ответ 🙂