我在Node中使用Mongoose弹性xp插件。但是,我无法获得适当的结果。在某些情况下,没有获取相关职位。这是我的代码。请注意,我的Post模型的“内容”字段也包含html标签。
型号->
const mongoose = require('mongoose');
var timestamps = require('mongoose-timestamp');
var mexp = require('mongoose-elasticsearch-xp');
var PostSchema = new mongoose.Schema({
title: String,
content: String
});
PostSchema.plugin(mexp);
PostSchema.plugin(timestamps);
var Post = mongoose.model('Post', PostSchema);
Post
.esCreateMapping(
{
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
)
.then(function (mapping) {
});
Post.on('es-bulk-sent', function () {
});
Post.on('es-bulk-data', function (doc) {
});
Post.on('es-bulk-error', function (err) {
});
Post
.esSynchronize()
.then(function () {
});
module.exports = Post;
这是搜索部分的代码。
function searchPosts(keyword) {
return new Promises((resolve, reject) => {
post.esSearch({
"query": {
"multi_match": {
"query": keyword,
"fields": ["title", "content"],
"fuzziness": "2",
}
},
"size": 15
})
.then(function (results) {
resole(results);
})
.catch((error) => {
reject(error);
});
});
}
我想实现模糊搜索。我想我没有正确使用“分析器”。在这方面也需要帮助。指定一个巨大的“大小”将提供大多数数据,包括绝对不相关的数据。
如果您使用Mongoosastic提供解决方案,那也将有所帮助。