如何解决提前键入搜索未在弹性搜索中获得预期结果
我正在尝试在搜索框中构建提前输入搜索功能。我使用以下属性和设置创建了索引。
{"index.number_of_shards":3,"index.number_of_replicas":2,"analysis":{"filter":{"autocomplete_filter":{"type":"edge_ngram","min_gram":1,"max_gram":20}},"analyzer":{"autocomplete":{"type":"custom","tokenizer":"standard","filter":["autocomplete_filter","lowercase"]}}}}
然后我尝试使用 nodejs elasticsearch 客户端 api 获取结果。
module.exports.search = async function (req,res) {
console.log(req.query.q);
var queryStrings = req.query.q.split(" ");
client.search({
index: "skills",body: {
"suggest": {
"suggestions": {
"text": queryStrings,"completion": {
"field": "skill","fuzzy": {
"fuzziness": "auto"
}
}
}
}
},},(err,result) => {
if(err) console.log(err)
return res.status(200).send({
statusCode: 200,content: {
data: result,}
});
});
};
上述查询的输出是
[{
"suggest": {
"suggestions": [{
"text": "jav","offset": 0,"length": 3,"options": [{
"text": "jaas","_index": "skills","_type": "_doc","_id": "15706","_score": 2,"_source": {
"skill": "jaas"
}
},{
"text": "jabaco","_id": "21028","_source": {
"skill": "jabaco"
}
},{
"text": "jabberd2","_id": "34684","_source": {
"skill": "jabberd2"
}
},{
"text": "jabbr","_id": "35577","_source": {
"skill": "jabbr"
}
},{
"text": "jacc","_id": "34873","_source": {
"skill": "jacc"
}
}
]
}]
}
}]
上述代码的问题在于它正在获取不相关的结果。而当我使用 cURL 执行请求时,它会获取适当的结果。需要帮助。
curl --location --request POST 'http://localhost/skills/_search' \
--header 'Content-Type: application/json' \
--data-raw '{
"query" : {
"match": {
"skill": "java"
}
},"suggest" : {
"my-suggestion" : {
"text" : "ava","term" : {
"field" : "skill"
}
}
}
}'
上述 cURL 命令的输出是
{
"hits": [{
"_index": "skills","_id": "17146","_score": 8.592034,"_source": {
"skill": "java1.4"
}
},{
"_index": "skills","_id": "43979","_source": {
"skill": "java-9"
}
},"_id": "44652","_source": {
"skill": "java-10"
}
},"_id": "1268","_score": 8.591877,"_source": {
"skill": "java"
}
},"_id": "25608","_source": {
"skill": "java-6"
}
},"_id": "28709","_source": {
"skill": "java-8"
}
},"_id": "223","_score": 7.970926,"_id": "4929","_id": "6175","_source": {
"skill": "java8"
}
},"_id": "6563","_source": {
"skill": "java"
}
}
]
}
请让我知道我在这里遗漏了什么。感谢您的回复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。