【问题标题】:ElasticSearch nGram filters out punctuationElasticSearch nGram 过滤掉标点符号
【发布时间】:2014-02-13 20:27:16
【问题描述】:

在我的 ElasticSearch 数据集中,我们有以句点分隔的唯一 ID。样本编号可能类似于 c.123.5432

使用 nGram 我希望能够搜索:c.123.54

这不会返回任何结果。我相信标记器正在分裂。为了解决这个问题,我在 token_chars 中添加了“标点符号”,但结果没有变化。我的分析器/标记器在下面。

我也试过:“token_chars”:[]

"settings" : {
    "index" : {
        "analysis" : {
            "analyzer" : {
                "my_ngram_analyzer" : {
                    "tokenizer" : "my_ngram_tokenizer"
                }
            },
            "tokenizer" : {
                "my_ngram_tokenizer" : {
                    "type" : "nGram",
                    "min_gram" : "1",
                    "max_gram" : "10",
                    "token_chars": [ "letter", "digit", "whitespace", "punctuation", "symbol" ]
                }
            }
        }
    }
},

编辑(更多信息): 这是相关字段的映射:

"ProjectID":{"type":"string","store":"yes", "copy_to" : "meta_data"},

这是我要复制到的字段(也有 ngram 分析器):

"meta_data" : { "type" : "string", "store":"yes", "index_analyzer": "my_ngram_analyzer"}

这是我用来查看我的搜索是否有效的命令(看到它正在搜索“meta_data”字段):

GET /_search?pretty=true
{ 
    "query": {
        "match": {
            "meta_data": "c.123.54"
        }
    }
}

【问题讨论】:

  • 使用以下命令测试它会发生什么://_analyze?text="c.1234.56"&tokenizer=my_ngram_tokenizer
  • @mconlin 我收到如下结果:pastebin.com/udrPLSy4
  • @mconlin 重要的一点:现有数据是“C.A1234.5678”。如果我搜索“1234”,我会得到一个结果。如果我搜索“A1234”,我什么也得不到。
  • 你是对的,我只是无法让它工作..你是否尝试过发布到他的弹性搜索谷歌组或 es 的 github 问题页面,这两个地方都有很多核心开发人员,并且他们回答问题很快。
  • 供参考,交叉发布到github:github.com/elasticsearch/elasticsearch/issues/5120

标签: elasticsearch tokenize n-gram


【解决方案1】:

来自https://github.com/elasticsearch/elasticsearch/issues/5120s1monw 的解决方案

通过使用 index_analyzer 搜索仅使用标准分析器。为了修复它,我将 index_analyzer 修改为分析器。请记住,结果的数量会大大增加,因此可能需要将 min_gram 更改为更高的数量。

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2016-10-30
    • 1970-01-01
    • 2014-03-08
    • 2016-01-05
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多