Как выполнить частичное совпадение с Mongoose и Elastic Search? - PullRequest
0 голосов
/ 21 февраля 2019

Я использую плагин 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 для предоставления решения, это также будет полезно.

...