У меня есть поле text
, заполненное фильтром word_delimiter
, использующее токенизатор keyword
, для создания дополнительных токенов, и я хотел бы найти их (операция match
) независимо от их положения в строке запроса. Например,
- работает - документ найден:
GET test-position/_search
{
"query": {
"match": {
"title.keywords": {
"query": "yuio zxcv",
"operator": "or"
}}}}
не работает - документ не найден, я не понимаю, почему? Анализатор выдает
одинаковые токены для строки запроса.
GET test-position/_search
{
"query": {
"match": {
"title.keywords": {
"query": "zxcv yuio",
"operator": "or"
}}}}
PUT test-position
{
"settings": {
"number_of_shards": "1",
"number_of_replicas": "0",
"analysis": {
"filter": {
"word_delimiter_filter": {
"type": "word_delimiter_graph",
"catenate_words": "true",
"catenate_numbers": "true",
"catenate_all": "true",
"preserve_original": "true",
"generate_number_parts": "true"
}},
"analyzer": {
"wordpart_analyzer": {
"filter": [
"word_delimiter_filter"
],
"tokenizer": "keyword"
}}}},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "standard",
"fields": {
"keywords": {
"type": "text",
"analyzer": "wordpart_analyzer"
}}}}}}
PUT test-position/_bulk
{"index":{}}
{"title":"asdf qwer yuio zxcv"}