【问题标题】:ElasticSearch : Handling apostrophe using ngram analyzerElasticSearch:使用 ngram 分析器处理撇号
【发布时间】:2018-03-19 20:02:33
【问题描述】:

我希望能够使用 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));
    });

});

如何处理?

【问题讨论】:

  • 有什么线索吗?我不知道我应该怎么做才能处理..

标签: node.js elasticsearch n-gram


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多