Индексирование документов только числовыми полями в asticsearch
Я пытаюсь хранить объекты в asticsearch, которые представлены только числовыми полями. В моем случае каждый объект имеет 300 полей с плавающей точкой и 1 поле идентификатора. Я поставил поле id как not_analyzed. Я могу хранить документы в ES.
"_index": "smart_content5",
"_type": "doc2vec",
"_id": "AVtAGeaZjLL5cvd8z9y7",
"_score": 1,
"_source": {
"feature_227": 0.0856793,
"feature_5": -0.115823,
"feature_119": -0.0379987,
"feature_145": 0.17952,
"feature_29": 0.0444945,
но теперь я хочу выполнить запрос, представленный теми же 300 полями, но разными числовыми значениями (конечно). Теперь я хочу найти документ, 300 полей которого "наиболее похожи" на поля этого запроса. Так что это похоже на косинусное сходство, но я пытаюсь использовать ES для этого, чтобы он был быстрым.
(1) Прежде всего, возможно ли вообще делать то, что я делаю??
(2) Во-вторых, я изучил функцию function_score в ES и попытался использовать ее, но она возвращает, что максимальный счет совпадения равен 0.0!!
Любые комментарии о том, что я должен использовать и что я могу делать неправильно в [2].
1 ответ
Я думаю тебе еще нужно function_score
но вот так (у меня сработало)
{
"query": {
"function_score": {
"query": {},
"functions": [
{
"gauss": {
"feature_227": {
"origin": "0",
"scale": "0.5"
}
}
},
{
"gauss": {
"feature_5": {
"origin": "0",
"scale": "0.5"
}
}
},
{
"gauss": {
"feature_119": {
"origin": "0",
"scale": "0.5"
}
}
},
{
"gauss": {
"feature_145": {
"origin": "0",
"scale": "0.5"
}
}
},
{
"gauss": {
"feature_29": {
"origin": "0",
"scale": "0.5"
}
}
}
],
"score_mode": "sum"
}
}
}