Вам нужно определить пользовательский анализатор , используя фильтр символов для удаления пробелов и дефисов (-
) s o, чтобы сгенерированные токены соответствовали вашим требованиям.
Индекс def
{
"settings": {
"analysis": {
"char_filter": {
"my_space_char_filter": {
"type": "mapping",
"mappings": [
"\\u0020=>", -> whitespace
"\\u002D=>" --> for hyphen(-)
]
}
},
"analyzer": {
"splcharanalyzer": {
"char_filter": [
"my_space_char_filter"
],
"tokenizer": "standard",
"filter": [
"lowercase"
]
}
}
}
},
"mappings" :{
"properties" :{
"title" :{
"type" : "text",
"analyzer" : "splcharanalyzer"
}
}
}
}
Токены, сгенерированные пользователем splcharanalyzer
POST myindex/_analyze
{
"analyzer": "splcharanalyzer",
"text": "toronto, new mexico, paris, lisbona, new york, sedro-woolley"
}
{
"tokens": [
{
"token": "toronto",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "newmexico",
"start_offset": 9,
"end_offset": 19,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "paris",
"start_offset": 21,
"end_offset": 26,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "lisbona",
"start_offset": 28,
"end_offset": 35,
"type": "<ALPHANUM>",
"position": 3
},
{
"token": "newyork",
"start_offset": 37,
"end_offset": 45,
"type": "<ALPHANUM>",
"position": 4
},
{
"token": "sedrowoolley",
"start_offset": 47,
"end_offset": 60,
"type": "<ALPHANUM>",
"position": 5
}
]
}
Запрос на поиск различий
{
"query": {
"match" : {
"title" : {
"query" : "sedro-woolley"
}
}
}
}
Результат поиска
"hits": [
{
"_index": "white",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"title": "toronto, new mexico, paris, lisbona, new york, sedro-woolley"
}
}
]
Поиск new
или york
не даст никакого результата.
{
"query": {
"match" : {
"title" : {
"query" : "york"
}
}
}
}
Результат
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}