#elasticsearch #firebase #elasticjs
#elasticsearch #firebase #elasticjs
Вопрос:
для моего приложения я использую систему поиска фонарика, в моей эластичной таблице я храню данные с двумя полями id: { name: "", uid: "" }
. когда я хочу восстановить определенное значение, я хочу выполнить частичное совпадение только в поле имени и восстановить все два поля, если совпадение сработает. в моих данных запроса обычно я сохраняю эту структуру
search : {
request: {
-54shdjwirjghcb7364gf92jcns20ahd: {
index: "firebase",
type: "event",
from: 0,
size: 50,
query: "*fra*"
}
}
}
результат положительный, но в этом случае фонарик ищет частичное совпадение во всех полях, потому что, если я делаю совпадение с частичным идентификатором пользователя или частичным именем, результат всегда положительный (если строка соответствует).
как я могу выполнить частичное совпадение только для одного поля?
моя очередь поиска на стороне сервера — это
_process: function (snap) {
var dat = snap.val();
var key = snap.key;
if (this._assertValidSearch(key, dat)) {
// Perform (a very simple) ElasticSearch query
this.esc.search({
index: dat.index,
type: dat.type,
from : dat.query.from,
size : dat.query.size,
q: dat.query
}, function (error, response) {
if (error) {
this._reply(key, { error: error, total: 0 });
} else {
this._reply(key, response);
}
}.bind(this));
}
},
заранее спасибо
Ответ №1:
Попробуйте использовать "name:*fra*"
в качестве запроса. Свойство запроса передается в elasticsearch в качестве параметра q .
Проверьте здесь:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-search.html