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

всем привет . нужна ваша помощь
пытаюсь искать через 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 через первый . или я что-то неправильно понимаю?

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

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