我用的是django\u elasticsearch\u dsl。
我的文档:
html_strip = analyzer(
'html_strip',
tokenizer='standard',
filter=["lowercase", "stop", "snowball"],
char_filter=["html_strip"]
)
class Document(django_elasticsearch_dsl.Document):
name = TextField(
analyzer=html_strip,
fields={
'raw': fields.KeywordField(),
'suggest': fields.CompletionField(),
}
)
...
我的请求:
_search = Document.search().suggest("suggestions", text=query, completion={'field': 'name.suggest'}).execute()
我已将以下文档“名称”编入索引:
"This is a test"
"this is my test"
"this test"
"Test this"
现在如果搜索 This is my text
如果你只收到
"this is my text"
但是,如果我搜索 test
,那么我得到的就是
"Test this"
即使我想要所有的文件 test
以他们的名义。
我错过了什么?
2条答案
按热度按时间tzdcorbm1#
匹配字段中间部分的完成提示的最佳方法是n-gram过滤器。
您可以使用多个建议,其中一个建议基于前缀,对于字段中间的匹配,您可以使用regex。
我不知道django\u elasticsearch\u dsl,添加了一个索引Map、数据、搜索查询和搜索结果的工作示例
索引Map:
索引数据:
搜索查询:
搜索结果:
gywdnpxw2#
根据用户给出的评论,使用ngrams添加另一个答案
添加索引Map、索引数据、搜索查询和搜索结果的工作示例
索引Map:
索引数据:
分析api:
生成以下令牌:
搜索查询:
搜索结果:
对于模糊搜索,您可以使用以下搜索查询: