gpt4 book ai didi

elasticsearch - 无法使用 haystack/elasticsearch 进行部分词搜索

转载 作者:行者123 更新时间:2023-11-29 02:50:31 24 4
gpt4 key购买 nike

我正在尝试让部分单词匹配工作,我已经查看了 related question但出于某种原因,我的设置不起作用。我正在使用 haystack 和 elasticsearch。有人可以告诉我我做错了什么吗?

class VendorIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
company_name = indexes.CharField(model_attr='company_name', null=True)

def get_model(self):
return Vendor

def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()

编辑:我通过使用自动完成完成了这项工作。但是,我觉得这是一个 hack。但这是我的代码:

class VendorIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
company_name = indexes.CharField(model_attr='company_name', null=True)
company_name_auto = indexes.NgramField(model_attr='company_name')
def get_model(self):
return Vendor

def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()

然后在 View 中:

class SearchVendorView(generics.ListAPIView):
serializer_class = serializers.CustomerVendorSerializer

def get_queryset(self):
results = SearchQuerySet().models(Vendor).autocomplete(company_name_auto=self.request.GET.get('q', ''))
vendors = []

for vendor in [result.object for result in results]:
vendor.is_liked = Vendor.objects.from_request(self.request).get(pk=vendor.id).user_vote
vendors.append(vendor)

return vendors

最佳答案

在我的例子中:django-haystack==2.5.1 + elasticsearch==5.0.1 + java elastic search daemon v2.3.1 这足以进行部分搜索:

from haystack import indexes
from authors.models import Author


class AuthorIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
last_name = indexes.CharField(model_attr='last_name')
first_name = indexes.CharField(model_attr='first_name')

def get_model(self):
return Author

def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()

然后 python manage.py rebuild_index 你可以通过以下方式搜索:

from haystack.query import SearchQuerySet
SearchQuerySet().filter(content="alex")

找到 Alexander

关于elasticsearch - 无法使用 haystack/elasticsearch 进行部分词搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26742385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com