如何使用 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)
]
)
我在 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)
]
)