Elasticsearch中的`ngram`过滤器和`ngram`令牌生成器之间是否存在性能差异

时间:2019-10-26 18:02:18

标签: elasticsearch

我都尝试过,当我测试分析仪时它们似乎产生相同的结果

settings: {
    analysis: {
        filter: {
            ngram_filter: {
                type: "ngram",
                min_gram: 2,
                max_gram: 20
            }
        },
        tokenizer: {
            ngram_tokenizer: {
                type: "ngram",
                min_gram: 2,
                max_gram: 20
            }
        },
        analyzer: {
            index_ngram: {
                type: "custom",
                tokenizer: "keyword",
                filter: [ "ngram_filter", "lowercase" ]
            },
            index_ngram2: {
                type: "custom",
                tokenizer: "ngram_tokenizer",
                filter: [ "lowercase" ]
            },
        },
    }
}

我得到的结果相同:

curl -X GET "localhost:9200/my_index/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
  "analyzer": "index_ngram", 
  "text":     "P&G 40-Bh"
}
'

curl -X GET "localhost:9200/my_index/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
  "analyzer": "index_ngram2", 
  "text":     "P&G 40-Bh"
}
'

我应该使用哪个?有性能差异吗?看起来他们只是按照不同的顺序进行操作,但是我不确定哪个性能更高,或者哪种更好的约定。

1 个答案:

答案 0 :(得分:2)

很难评估性能差异,因为我还没有遇到过这种特殊情况,而是尝试针对大量不同的示例文本集进行尝试。但是,我认为将此类分析器应用于大量文本并不是一个好主意,因此我认为这不是常见的用例。如果我不得不猜测,我会猜测性能非常相似。在每种情况下,分析过程都必须在相同长度的文本上进行窗口显示,并且正如您所指出的,它必须发出一组相同的标记(忽略报告的不同标记偏移量)。我还使用了personal visualizer来观察这一点。

我将使用更简单,更简明的分析器描述(ngram标记器),而不是使用回旋关键字标记器(“ noop”标记器)并定义一个额外的ngram过滤器。将来可能更容易证明,理解和解释。

相关参考文献: