Python 没有草堆的高效Django全文搜索
没有草堆的Django数据库无关全文搜索的下一个最佳选项是什么 我有一个这样的模型:Python 没有草堆的高效Django全文搜索,python,django,django-haystack,Python,Django,Django Haystack,没有草堆的Django数据库无关全文搜索的下一个最佳选项是什么 我有一个这样的模型: class Paper(models.Model): title = models.CharField(max_length=1000) class Person(models.Model): name = models.CharField(max_length=100) class PaperReview(models.Model): paper = models.ForeignK
class Paper(models.Model):
title = models.CharField(max_length=1000)
class Person(models.Model):
name = models.CharField(max_length=100)
class PaperReview(models.Model):
paper = models.ForeignKey(Paper)
person = models.ForeignKey(Person)
我需要按标题和评论员姓名搜索论文,但我也希望从一个人的角度进行搜索,找到他们已经和没有评论过的论文。使用Haystack,实现全文索引以按标题和名称字段进行搜索很简单,但据我所知,在没有特定人员审阅的情况下,无法进行查找论文所需的“左外连接”。Haystack只是一个包装器,它公开了一些不同的搜索引擎后端:
- 索尔
- 弹性搜索
- 呼呼
- 夏平
...other params...
search_terms = self.request.GET.get('q')
if search_terms:
# remove possible other delimiters and other chars
# that could interfere
cleaned_terms = re.sub(r'[!\'()|&;,]', ' ', search_terms).strip()
if cleaned_terms:
# Check against all the params we want
# apply to previous terms' filtered results
q = reduce(
lambda p, n: p & n,
map(
lambda word:
Q(your_property__icontains=word) | Q(
second_property__icontains=word) | Q(
third_property__icontains=word)
cleaned_terms.split()
)
)
qs = YourModel.objects.filter(q)
return qs
我最终使用了,它为PostgreSQL的内置全文搜索功能提供了一个简单的Django接口。我认为我更一般的观点是,我正在进行的搜索类型本质上不适合于Haystack包装的搜索功能类型。索引SQL表可能非常有效地处理左外部联接,在某些情况下甚至可以很好地处理全文搜索。我试过Whoosh(恐怖)、Solr和ElasticSearch,但没有一个能很好地处理这个特定案例。@Cerin你读过我在ElasticSearch中对父/子文档的上述评论吗?