如何使用Mongoose和Elastic Search进行部分匹配?

时间:2019-02-21 14:22:52

标签: node.js elasticsearch mongoosastic

我在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提供解决方案,那也将有所帮助。

0 个答案:

没有答案