我正在使用elasticsearch-dsl在elasticsearch索引中索引数据。我正在使用以下类来创建elasticsearch文档:
class BooksDoc(Document):
title = Text(
analyzer=my_analyzer
)
author = Text(
analyzer=my_analyzer
)
publisher = Text(
analyzer=my_analyzer
)
image_url = Text(analyzer=my_analyzer)
price = Text(analyzer=my_analyzer)
category =Text(analyzer=my_analyzer)
published = Boolean()
upload_date = Text()
class Index:
name = 'books'
这是我的分析仪:
my_analyzer = analyzer('my_analyzer',
tokenizer=tokenizer('trigram', 'edge_ngram', min_gram=1, max_gram=20),
filter=['lowercase']
)
我正在使用以下功能为文档建立索引:
def indexing(self):
doc = BooksDoc(
meta={'id': self.id},
title=self.book_title,
author=self.book_author,
publisher=self.book_publisher,
image_url=self.front_image,
price=self.book_price,
catagory=__catagory,
published=self.isPublished,
upload_date=self.dateadded
)
try:
doc.save()
return doc.to_dict(include_meta=True)
except:
print(traceback.format_exc())
return None
我想实现搜索,以便当用户输入搜索字符串时,我可以查询elasticsearch并获取我找到匹配项的所有记录。例如,如果用户输入“ Boo”,则应返回所有包含字符串“ Boo”的记录。当字符串在Elasticsearch中完全匹配时,现在搜索工作正常,但是如果存在部分匹配,我也希望获取记录。我该怎么办?
答案 0 :(得分:0)
这实际上取决于您使用的查询。通常,如果您使用的是edge_ngram
,则需要指定其他分析器进行搜索,以使edge_ngram
不应用于输入。然后,您可以使用标准的match
查询。
对于自动建议,虽然使用Completion
字段和完成建议器(0,1)更好(性能更高)。
0-https://www.elastic.co/blog/you-complete-me 1-http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#suggestions