Я использую плагин Mongoose эластичный XP в Node.Но я не могу получить надлежащие результаты.В некоторых случаях соответствующие сообщения не извлекаются.Вот мой код.Обратите внимание, что поле "content" моей модели Post также содержит html-теги.
Model ->
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 для предоставления решения, это также будет полезно.