我都尝试过,当我测试分析仪时它们似乎产生相同的结果
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"
}
'
我应该使用哪个?有性能差异吗?看起来他们只是按照不同的顺序进行操作,但是我不确定哪个性能更高,或者哪种更好的约定。
答案 0 :(得分:2)
很难评估性能差异,因为我还没有遇到过这种特殊情况,而是尝试针对大量不同的示例文本集进行尝试。但是,我认为将此类分析器应用于大量文本并不是一个好主意,因此我认为这不是常见的用例。如果我不得不猜测,我会猜测性能非常相似。在每种情况下,分析过程都必须在相同长度的文本上进行窗口显示,并且正如您所指出的,它必须发出一组相同的标记(忽略报告的不同标记偏移量)。我还使用了personal visualizer来观察这一点。
我将使用更简单,更简明的分析器描述(ngram标记器),而不是使用回旋关键字标记器(“ noop”标记器)并定义一个额外的ngram过滤器。将来可能更容易证明,理解和解释。
相关参考文献: