Javascript 弹性搜索关键字不匹配
一、 我正在弹性搜索数据库中执行搜索操作。我需要的是,如果我为搜索提供关键字'react',它应该只提供与关键字'react'匹配的结果。如果关键字是'react router',结果应该只包含'react router'。 问题是,如果我给搜索关键字'react',与'react router'关键字匹配的结果也会被检索。 有什么比匹配短语更好的选择吗?我尝试了regexp和通配符,但没有用。 如何解决这个问题Javascript 弹性搜索关键字不匹配,javascript,node.js,
elasticsearch,Javascript,Node.js,
elasticsearch,一、 我正在弹性搜索数据库中执行搜索操作。我需要的是,如果我为搜索提供关键字'react',它应该只提供与关键字'react'匹配的结果。如果关键字是'react router',结果应该只包含'react router'。 问题是,如果我给搜索关键字'react',与'react router'关键字匹配的结果也会被检索。 有什么比匹配短语更好的选择吗?我尝试了regexp和通配符,但没有用。 如何解决这个问题 `const searchTags = (tag) => { const
`const searchTags = (tag) => {
const answerPush = [];
return new Promise((resolve, reject) => {
client.search({
index : constants.QUESTIONNAIRE_INDEX,
type : constants.QUESTIONS_TYPE,
scroll : constants.SCROLL,
body : {
query : {
match_phrase : {
tags : tag
}
}
}
},
function getMoreUntilDone(err, res) {
if (err) {
reject(err);
return;
} else {
res.hits.hits.forEach(function(hit) {
answerPush.push(hit._source);
});
if (res.hits.total > answerPush.length) {
client.scroll({
scrollId: res._scroll_id,
scroll: constants.SCROLL
}, getMoreUntilDone);
} else {
const answerArray = [];
answerPush.map(val => {
answerArray.push(val);
});
const result = {
questions: answerArray
};
resolve(result);
}
}});
});
};
`使用术语查询而不是匹配短语查询
const searchTags = (tag) => {
const answerPush = [];
return new Promise((resolve, reject) => {
client.search({
index : constants.QUESTIONNAIRE_INDEX,
type : constants.QUESTIONS_TYPE,
scroll : constants.SCROLL,
body : {
query : {
term : {
tags : tag
}
}
}
},
function getMoreUntilDone(err, res) {
if (err) {
reject(err);
return;
} else {
res.hits.hits.forEach(function(hit) {
answerPush.push(hit._source);
});
if (res.hits.total > answerPush.length) {
client.scroll({
scrollId: res._scroll_id,
scroll: constants.SCROLL
}, getMoreUntilDone);
} else {
const answerArray = [];
answerPush.map(val => {
answerArray.push(val);
});
const result = {
questions: answerArray
};
resolve(result);
}
}});
});
};
若要按精确匹配进行搜索,必须使用术语查询 在您的情况下,它可能工作得很好,请记住,Elasticsearch将分析/索引您的字符串,例如react-redux将被“拆分”为两个关键字,因为“-” 您需要在映射中配置策略:
仍不工作,显示关键字“react-redux”的空结果@rahulmr是否有标记完全等于“react-redux”的文档?@rahulmr能否添加标记映射?您需要使用自定义分析器对ES说“请不要在“-”上拆分我的字符串,以便能够搜索完整字符串