Python 3.x Wagtail:对ES 使用自定义分析器;查询(同义词)
我们正在尝试使用一个分析器,它支持Wagtail中内置的ES7支持的同义词搜索。 到目前为止,我们能够定义分析器并更新索引,但在执行查询时设置分析器没有任何成功 以下是索引的设置:Python 3.x Wagtail:对ES 使用自定义分析器;查询(同义词),python-3.x,elasticsearch,wagtail,wagtail-search,Python 3.x,elasticsearch,Wagtail,Wagtail Search,我们正在尝试使用一个分析器,它支持Wagtail中内置的ES7支持的同义词搜索。 到目前为止,我们能够定义分析器并更新索引,但在执行查询时设置分析器没有任何成功 以下是索引的设置: 'INDEX_SETTINGS': { 'settings': { 'index': { "analysis": { "filter": {
'INDEX_SETTINGS': {
'settings': {
'index': {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"bowtie pasta, farfalle",
]
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
}
},
}
},
}
这是我们需要发送给ES的搜索负载的一个示例:
{
"query": {
"query_string": {
"query": "farfalle",
"analyzer": "my_synonyms"
}
}
}
我们已经看到,搜索函数不允许将自定义分析器作为参数传递给它
class SearchableQuerySetMixin:
def search(self, query, fields=None,
operator=None, order_by_relevance=True, partial_match=True, backend='default'):
有没有一种方法可以做到这一点,而不必对ES实现中涉及的所有部分进行子类化?
在索引时在字段级别定义它的选项似乎非常麻烦(“额外”:)
理想情况下,我们能够做到以下几点:
page_results = TranslatablePage.objects.live().filter(language_id=1).search(search_query, params={'analyzer': 'my_synonyms'})