У меня проблема с поиском вasticsearch, и я надеюсь, что вы можете помочь.
Я хочу найти документ, имеющий ключевое слово, только нижний регистр которого анализатор анализирует.Когда сгенерированный термин является частью искомого запроса, я хочу, чтобы Elasticsearch нашел его.
Пример поиска:
"query": {
"match": {
"categoryNames": "CD&DVD Aufbewahrung schwarz"
}
}
Документ, который я хочу найти:
"_source": {
"categoryId": 11972638,
"categoryNames": [
"DVD-Koffer",
"CD-Koffer",
"CD-Aufbewahrung",
"DVD-Aufbwahrung",
"DVD-Ordner",
"EDV-DVD-Aufbewahrung",
"EDV-CD-Aufbewahrung",
"CD&DVD Aufbewahrung",
"Multimediabox"
],
"lvl3Id": 11972638
}
Анализатор индекса:
"analysis" : {
"analyzer" : {
"default" : {
"type": "custom",
"tokenizer": "keyword",
"filter" : ["lowercase"]
}
}
}
Tervevector документа, который я хочу найти:
"cd&dvd aufbewahrung": {
"term_freq": 1,
"tokens": [
...
]
},
"cd-aufbewahrung": {
"term_freq": 1,
"tokens": [
...
]
},
"cd-koffer": {
"term_freq": 1,
"tokens": [
...
]
},
....
У меня нет результата.Когда я только ищу «CD & DVD aufbewahrung», я нахожу документ.
Я думаю, чтоasticsearch пытается найти термин «CD & DVD Aufbewahrung schwarz», который не существует, вместо сопоставления«CD & DVD Aufbewahrung» и игнорируйте «schwarz».
При поиске нельзя использовать стандартный анализатор, поскольку важно, чтобы только «CD & DVD Aufbewahrung» находил «CD & DVD Aufbewahrung», а не, например, термин, содержащий только «Aufbewahrung»"или" Aufbewahrung CD & DVD ", который будет найден, когда термин будет проанализирован, например, через пробелы.
Несколько примеров поиска с моими ожиданиями для документа выше:
CD&DVD Aufbewahrung -> Found
CD&DVD aufbewahrung -> Found
schwarz CD&DVD Aufbewahrung -> Found
CD&DVD Aufbewahrung gelb -> Found
schwarz CD&DVD Aufbewahrung gelb -> Found
CD&DVD schwarz Aufbewahrung -> not Found
Aufbewahrung CD&DVD -> not Found
schwarz CD & DVD Aufbewahrung -> not Found
schwarzCD&DVD Aufbewahrung -> Not Found
Кто-нибудь знает, как это исправить?