Есть ли разница в производительности между фильтром `ngram` и токенизатором` ngram` в Elasticsearch? - PullRequest
0 голосов
/ 26 октября 2019

Я пробовал оба, и они, кажется, дают одинаковые результаты при тестировании анализаторов

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 Ответ

2 голосов
/ 27 октября 2019

Трудно взвесить разницу в производительности, поскольку я сам не сталкивался с этим конкретным сценарием и не пытался использовать его для больших и разных наборов образцов текста. Однако я не думаю, что стоит применять такие анализаторы для больших наборов текстов, и поэтому я предполагаю, что это не обычный случай использования. Если бы мне пришлось угадывать, я бы предположил, что производительность довольно похожа. В каждом случае процесс анализа должен был бы отображать окно с одинаковой длиной текста, и, как вы указали, он должен выдавать идентичный набор токенов (игнорируя сообщаемые отличия в смещениях токенов). Я также использовал персональный визуализатор , чтобы также наблюдать это.

Я бы пошел с более простым и кратким описанием анализатора (токенайзер ngram) вместо того, чтобы идти с обходным ключом tokenizer (a "noop"). "токенизатор) и определение дополнительного фильтра ngram. Это может быть легче обосновать, понять и объяснить в будущем.

Ссылки по теме:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...