elasticsearch - elasticsearch edge n-gram token 生成器:在 token 中包含符号

标签 elasticsearch nest

我正在使用基于Edge NGram token 生成器的自定义 token 生成器,并且我希望能够搜索诸如“sport +”之类的字符串,即,我希望将特殊符号(例如+号)视为 token 的一部分。

例如,我们的文档包含以下字段:
"typeName": "LC 500h Sport+ CVT"要么"typeName": "LC 500h Sport CVT"

使用以下子句执行查询:

{
  "match": {
    "typeName": {
      "query": "sport+ cvt",
        "operator": "and"
    }
  }
}

提取两个文档。但是,在这种情况下,我们只希望返回带有"typeName": "LC 500h Sport+ CVT"的文档。

我们一直在标记程序设置中使用以下token_chars类:digitletterpunctuation。我以为将symbol添加为token_chars类并重新创建索引可以解决问题,但这没有帮助。

编辑:
这是Nest语法中的分析器定义:

Settings(s => s
    .Analysis(_ =>
        _.Analyzers(a => a
                .Custom(
                    "vehicleanalyzer",
                    descriptor => descriptor
                        .Tokenizer(vehicleEdgeNgram)
                        .Filters("lowercase"))
                  .Standard("vehiclesearch",
                  descriptor => descriptor))
            .Tokenizers(descriptor => descriptor
                .EdgeNGram(
                    vehicleEdgeNgram,
                    tokenizerDescriptor =>
                        tokenizerDescriptor
                            .MinGram(1)
                            .MaxGram(10)
                            .TokenChars(
                                TokenChar.Digit,
                                TokenChar.Letter,
                                TokenChar.Punctuation,
                                TokenChar.Symbol)))))

最佳答案

documentation所写,token_chars为:

Character classes that should be included in a token. Elasticsearch will split on characters that don’t belong to the classes specified. Defaults to [] (keep all characters).



默认情况下,elasticsearch保留所有字符。仅当您希望倒排索引中的字符类别更少时,才应使用此选项。因此,要解决您的问题,您只需删除token_chars的定义:您的 token 生成器将保留所有字符

关于elasticsearch - elasticsearch edge n-gram token 生成器:在 token 中包含符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59578056/

相关文章:

authentication - 使用 Nginx 进行 ElasticSearch 集群身份验证

elasticsearch - 使用 Nest 运行 Elasticsearch 原始查询

elasticsearch - 使用Nest搜索无法获得预期结果

elasticsearch - 有没有一种方法可以将属性类型定义为ElasticSearch Array数据类型中的关键字?

json - Kibana查询DSL:如何在包含JSON语法的文本值字段上应用正则表达式过滤器

elasticsearch - 使用NEST API将数据插入ElasticSearch

ruby - Logstash-输入文件插件以将数据保留在内存中

c# - Elasticsearch NEST 按日期范围过滤

c# - 跨多种类型的 ElasticSearch NEST 查询

elasticsearch - NEST v1.0.2与Elasticsearch 1.4的兼容性