如何使用 Python elasticsearch_dsl 在分析器中包含 shingle elasticsearch 过滤器

How to include shingle elasticsearch filter in analyzer with Python elasticsearch_dsl

我在 Django 应用程序中使用弹性搜索进行全文搜索。我正在使用 pypi 中的 elastic_dsl 库来与集群交互。我正在尝试在分析器中实现一个 shingle 过滤器。我相信我已经让它可以使用默认值:

from elasticsearch_dsl import analyzer, tokenizer


main_analyzer = analyzer(
    'main_analyzer',
    tokenizer="standard",
    filter=[
        "lowercase",
        "stop",
        "porter_stem",
        "shingle"
        ]
    )

我想更改默认设置。例如,将 max_shingle_size 设置为 5 而不是默认的 2。我找不到这样做的语法。我已经阅读了文档、Git 存储库中的示例以及一些源代码。

您需要定义一个自定义标记过滤器并在您的自定义分析器中使用它:

from elasticsearch_dsl import analysis

main_analyzer = analysis.analyzer(
    "main_analyzer",
    tokenizer="standard",
    filter=[
        "lowercase",
        "stop",
        "porter_stem",
        analysis.token_filter("my_shingle", "shingle", max_shingle_size=5)
    ]
)