Я написал этот код Python, где я сначала указываю data mapping
для контента, а затем поисковый запрос для контента в Elasticsearch:
Отображение данных:
data_mapping = {
"settings": {
"analysis": {
"filter": {
"stop_words": {
"type": "stop",
"stopwords": "_english_"
},
"stemmer_stem": {
"type": "standard",
"language": "english"
},
"synonym": {
"type": "synonym",
"synonyms_path": "wn_s.pl"
}
},
"analyzer": {
"analyzer": {
"tokenizer": "standard",
"filter": [
"stop_words",
"stemmer_stem",
"synonym"
]
}
}
}
},
"mappings": {
str(index_name).lower(): {
"properties": {
"id": {
"type": "string",
"fields": {
"stemmed": {
"type": "string",
"analyzer": "analyzer"
}
}
},
"doc_q": {
"type": "array",
"fields": {
"stemmed": {
"type": "string",
"analyzer": "analyzer"
}
}
},
"doc_a": {
"type": "string",
"fields": {
"stemmed": {
"type": "string",
"analyzer": "analyzer"
}
}
},
"votes": {
"type": "integer",
"fields": {
"stemmed": {
"type": "integer",
"analyzer": "analyzer"
}
}
}
}
}
}
}
Поисковый запрос:
query1 = {
"function_score": {
"query": {
"multi_match": {
"type": "phrase",
"query": question,
"fields": ["doc_q"]
}
},
"field_value_factor": {
"field": "votes",
"modifier": "log2p"
}
}
}
query2 = {
"function_score": {
"query": {
"multi_match": {
"type": "best_fields",
"query": question,
"fields": ["doc_q"]
}
},
"field_value_factor": {
"field": "votes",
"modifier": "log2p"
}
}
}
data = {
"query": {
"bool": {
"should": [
query1,
query2
]
}
}
}
response = es.search(index=str(index_name).lower(), body=data)
Я поместил файл wordnet
wn_s.pl
в каталог конфигурации моей установки elasticsearch
.Когда я выполняю свой поисковый запрос, скажем, для слова enable
, которое является синонимом able
, он ничего не возвращает.Ошибка не появляется, но это не похоже на поиск синонимов в файле wordnet
. Есть ли какие-либо синтаксические / логические ошибки в моих data mapping
или search query
?