У меня есть индекс со следующим сопоставлением и анализатором:
settings: {
analysis: {
char_filter: {
custom_cleaner: {
# remove - and * (we don't want them here)
type: "mapping",
mappings: ["-=>", "*=>"]
}
},
analyzer: {
custom_ngram: {
tokenizer: "standard",
filter: [ "lowercase", "custom_ngram_filter" ],
char_filter: ["custom_cleaner"]
}
},
filter: {
custom_ngram_filter: {
type: "nGram",
min_gram: 3,
max_gram: 20,
token_chars: [ "letter", "digit" ]
}
}
}
},
mappings: {
attributes: {
properties: {
name: { type: "string"},
words: { type: "string", similarity: "BM25", analyzer: "custom_ngram" }
}
}
}
}
И у меня есть следующие 2 документа в индексе:
"name": "shirts", "words": [ "shirt"]
и
"name": "t-shirts", "words": ["t-shirt"]
Я выполняю запрос с несколькими совпадениями как
"query": {
"multi_match": {
"query": "t-shirt",
"fields": [
"words",
"name"
],
"analyzer": "custom_ngram"
}
}
Вопрос:
У рубашек – 1,17, а у футболки – 0,8. Почему это так и как я могу добиться того, чтобы футболка (прямое соответствие) имела более высокий балл?
Мне нужны ngrams для другого варианта использования, где я должен обнаруживать совпадения. (рубашка в мышечной рубашке, ...) Поэтому я не могу пропустить ngrams, я думаю.
Благодарю вас!