Elasticsearch превратить неверные результаты? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь создать поисковую систему, например, 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 окислители, но, сохраняя поиск только правильные слова.Попробуйте много картографических комбинаций, результат все время одинаковый.Может ли кто-нибудь мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...