Я пытаюсь создать поисковую систему, например, Amazon (предлагать категории из терминов поиска по включенным продуктам), я запрашиваю оператор AND, ноasticsearch выдает мне неправильные результаты, эти категории не связаны с этим продуктом.
Вотмои карты.
$params = [
'index' => $index,
'body' => [
'settings' => [
"analysis" => [
'filter' => [
'autocomplete_filter' => [
'type' => 'edge_ngram',
'min_gram' => '2',
'max_gram' => '10'
]
,
'shingle' => [
'type' => 'shingle',
'min_shingle_size' => '3',
'max_shingle_size' => '3'
]
],
'analyzer' => [
'autocomplete' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'autocomplete_filter'
]
],
'trigram' => [
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'shingle'
]
],
'reverse' => [
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'reverse'
]
]
]
]
]
],
];
$params = [
'index' => $index,
'type' => $type,
'body' => [
$type => [
'_source' => [
'enabled' => true
],
'properties' => [
'search' => [
'type' => 'text',
'fielddata' => true,
'fields' => [
'auto_complete' => [
'type' => 'text',
'analyzer' => 'autocomplete',
'fielddata' => true
],
'suggestions' => [
'type' => 'text',
'analyzer' => 'trigram',
],
'trigram' => [
'type' => 'text',
'analyzer' => 'trigram',
],
'reverse' => [
'type' => 'text',
'analyzer' => 'reverse',
],
]
],
'name' => [
'type' => 'text',
'analyzer' => 'autocomplete',
],
'category_id' => [
'type' => 'integer'
],
'category' => [
'type' => 'text',
'fielddata' => true
],
'price' => [
'type' => 'float',
]
]
]
],
'include_type_name' => true
];
Вот мой поисковый запрос
$params = [
'index' => $index,
'type' => $type,
'body' => [
//'from' => $from,
'size' => '20',//$item_per_page,
//"_source" => ["category", "category_id", "brand", "brand_id"],
'query' => [
'bool' => [
'should' => [
'multi_match' => [
'query' => $search,
'fields' => [
'search.auto_complete^5'
],
"fuzziness" => "AUTO",
"prefix_length" => '3',
'type' => 'best_fields',
'operator' => 'AND',
]
]
]
],
'suggest' => [
'text' => $search,
'suggestion' => [
'phrase' => [
'field' => 'search.trigram',
'size' => '1',
'gram_size' => '3',
'direct_generator' => [
[
'field' => 'search.trigram',
'suggest_mode' => 'always'
]
],
'highlight' => [
'pre_tag' => '<em>',
'post_tag' => '</em>'
]
]
]
],
'aggs' => [
'by_category' => [
'terms' => [
'field' => 'category_id',
'order' => [
'_count' => 'desc'
]
],
'aggs' => [
'category_name' => [
'top_hits' => [
'size' => '1',
'_source' => [
'include' => ['category']
]
]
]
]
]
]
]
];
* 1008.
например: у меня есть Loreal окислитель цвета волос связанный категория окислителей когда я ищу лореальные окислители, покажи мне категорию окислителей и покажи также разные категории, даже если я напишу неправильноLoreal Ocidants его предлагают мне Loreal окислители, но, сохраняя поиск только правильные слова.Попробуйте много картографических комбинаций, результат все время одинаковый.Может ли кто-нибудь мне помочь?