Поиск через should и wildcard


(Mykola Vantukh) #1

всем привет . нужна ваша помощь
пытаюсь искать через wildcard и should , но оно работает как-то странно .

                         'bool' => [
 "should" => [
                                    [
                                        "wildcard" => [ "product_name.letter" => "*" . $this->formatQueryStr($query) . "*" ]
                                    ],
                                    [
                                        "wildcard" => [ "product_name.digit" => "*" . $this->formatQueryStr($query) . "*" ]
                                    ]
                                ],
                            ],

маппинг

'settings' => [
                    "analysis" => [
                        "analyzer" => [
                            "letter_analyzer" => [
                                "type" => "custom",
                                "tokenizer" => 'letter_tokenizer',
                                "filter" => [
                                    "lowercase"
                                ]
                            ],
                            "digit_analyzer" => [
                                "type" => "custom",
                                "tokenizer" => 'digit_tokenizer'
                            ],
                        

                        ],
                        "tokenizer" => [
                            'letter_tokenizer' => [
                                "type" => "char_group",
                                "tokenize_on_chars" => [
                                    "whitespace",
                                    "punctuation",
                                    "symbol",
                                    "digit"
                                ]
                            ],
                            'digit_tokenizer' => [
                                "type" => "char_group",
                                "tokenize_on_chars" => [
                                    "whitespace",
                                    "punctuation",
                                    "symbol",
                                    "letter"
                                ]
                            ],
                          
                        ],

                    ]
                ],
                'mappings' => [
                    'product' => [
                        'properties' => [
                            'id' => [
                                'type' => 'integer'
                            ],
                            'model' => [
                                'type' => 'text'
                            ],
                            'image' => [
                                'type' => 'text'
                            ],
                            'product_name' => [
                                'type' => 'text',
                                "analyzer" => "keyword",
                                "fields" => [
                                    "letter" => [
                                        "type" => "text",
                                        "analyzer" => "letter_analyzer",
                                    ],
                                    "digit" => [
                                        "type" => "text",
                                        "analyzer" => "digit_analyzer",
                                    ],
                                   
                                ],
                            ]
                        ]
                    ]
                ]

как я понимаю оно должно пробегатся по токенам и искать по ним фразу нужную .вот например есть 4Good T700i и токены [4,Good,T,700,i] если я ищу good ,то все ок находит , но если написать 4good то ничего нет , хотя по логике оно должно найти "4" через второй wildcard и good через первый . или я что-то неправильно понимаю?


(Igor Motov) #2

wildcard не анализирует запросы. Поэтому 4Good будет искать токены в которых содержиться 4Good, у вас такого токена нет. В целом, то что вы делаете будет работать крайне неоптимально. Вы не могли бы рассказать, что вы пытаетесь добиться?


(system) closed #3

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.