ElasticSearch:使用ngram分析器处理撇号

时间:2018-03-11 16:53:40

标签: node.js elasticsearch n-gram

我希望能够使用ngram分析器搜索可包含撇号的内容:

我创建了一个索引并将我的内容映射到我定义的分析器:

async function createIndex() {
    var settings = {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer",
                "filter": [
                  "lowercase"
                ]
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "type": "ngram",
              "min_gram": 2,
              "max_gram": 10,
              "token_chars": [
                "letter",
                "digit"
              ]
            }
          }
        }
      }

    return await client.indices.create({
        index: 'books',
        body: {
            settings: settings
        }
    });
}

然而,当我搜索“arc'hant”之类的东西时,它会在现实中搜索“arc”和“hant”而不是一个单词,因此它返回我不想返回的匹配。

这是我的搜索请求:

router.get('/autocomplete', function(req, res, next) {
    var content = req.query.term;
    content = content.toLowerCase();

    client.search({
      index: 'books',
      type: 'books',
      body:{
        "query": {
          "query_string" : {
            "fields" : [
               "name^5",
               "content"
            ],
            "query" : content,
            "default_operator" : "AND"
          }
        }
      }
    }).then(function (resp) {
        res.send(resp);
    }, function (err) {
        res.send(formatError(err));
    });

});

处理这个问题的方法是什么?

1 个答案:

答案 0 :(得分:0)

token_chars中添加“标点符号”使其正常工作!