Морфологічний пошук в Elasticsearch
Морфологічний пошук обробляє різні форми слів: "running", "ran", "run" всі збігаються з запитом "run" (при правильному стемінгу).
Використання фільтра stemmer
PUT /articles
{
"settings": {
"analysis": {
"filter": {
"english_stemmer": {
"type": "stemmer",
"language": "english"
}
},
"analyzer": {
"english_with_stemming": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "stop", "english_stemmer"]
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "english_with_stemming",
"search_analyzer": "english_with_stemming"
}
}
}
}
POST /articles/_doc
{
"content": "Running is great for health. The runner finished the race quickly."
}
GET /articles/_search
{
"query": {
"match": {
"content": "run" // збігається: running, runner, run
}
}
}
Українська морфологія
PUT /ukrainian_docs
{
"settings": {
"analysis": {
"analyzer": {
"ukrainian_morphology": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "ukrainian_stop"]
}
},
"filter": {
"ukrainian_stop": {
"type": "stop",
"stopwords": "_ukrainian_"
}
}
}
},
"mappings": {
"properties": {
"text": {
"type": "text",
"analyzer": "ukrainian_morphology"
}
}
}
}
POST /ukrainian_docs/_doc
{
"text": "Пошук текстів за морфологічними основами"
}
GET /ukrainian_docs/_search
{
"query": {
"match": {
"text": "шукати" // збігається: пошук, пошукам, шукати, пошуках
}
}
}
Синсети для семантичного пошуку
PUT /books
{
"settings": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms": [
"автор,письменник,романіст",
"книга,роман,публікація",
"швидкий,скорий,живий,поспішний"
]
}
},
"analyzer": {
"synonym_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "synonym_filter"]
}
}
}
}
}







