Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django haystack elasticsearch多索引错误结果_Python_Django_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Django Haystack - Fatal编程技术网 elasticsearch,django-haystack,Python,Django,elasticsearch,Django Haystack" /> elasticsearch,django-haystack,Python,Django,elasticsearch,Django Haystack" />

Python django haystack elasticsearch多索引错误结果

Python django haystack elasticsearch多索引错误结果,python,django,elasticsearch,django-haystack,Python,Django,elasticsearch,Django Haystack,我已经使用django haystack+elasticsearch在我的网站上建立了一个搜索索引。有不同的索引,一般来说它们工作正常,除了我搜索一个人时的ProjectIndex。让我解释一下: 这些是模型: class Person(models.Model): first_name = models.CharField() last_name = models.CharField() class Project(models.Model): project_nam

我已经使用django haystack+elasticsearch在我的网站上建立了一个搜索索引。有不同的索引,一般来说它们工作正常,除了我搜索一个人时的ProjectIndex。让我解释一下:

这些是模型:

class Person(models.Model):
    first_name = models.CharField()
    last_name = models.CharField()

class Project(models.Model):
    project_name = models.CharField()
    employees = models.ManyToManyField(Person)
这些是索引:

class ProjectIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    project_name = indexes.CharField(model_attr='project_name', boost=1.4)
    employees = indexes.CharField(boost=1.5)

    def get_model(self):
        return Project

    def prepare_employees(self, obj):
        return ' '.join([employee.__unicode__() for employee in obj.employees.all()])

    def prepare(self, obj):
        data = super(ProjectIndex, self).prepare(obj)
        data['boost'] = 1.3
        return data

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

    def get_model(self):
        return Person
当我运行rebuild_索引时,所有项目似乎都已正确索引。当我搜索一个人时,对elasticsearch服务器的一个简单http查询返回有用的项目结果(非常有意义)

另一方面,SearchQuerySet只返回3个项目,其中此人没有参与,而且此人的姓名与项目名称也不相似

>>> sqs = SearchQuerySet().filter(content__auto=q)
>>> sqs.count()
8
>>> sqs.models(Project)
[<SearchResult: project.project (pk=u'409')>, <SearchResult: project.project (pk=u'521')>, <SearchResult: project.project (pk=u'82')>]
>>sqs=SearchQuerySet().filter(content\uu auto=q)
>>>sqs.count()
8.
>>>sqs.模型(项目)
[, ]

我做错什么了吗?感谢您的反馈:-)

通过修改filter()查询,我获得了更高质量的结果。我在django haystack文档中学习了filter_或()方法,可以根据需要多次连接。通过这种方式,很容易根据需要匹配任意多的字段和/或索引。例如:

sqs = SearchQuerySet().filter_or(content__contains=q).filter_or(employees__name__contains=q).filter_or(projects_name__contains=q)
# etc.
正如刚才所说,这大大提高了搜索结果的质量

sqs = SearchQuerySet().filter_or(content__contains=q).filter_or(employees__name__contains=q).filter_or(projects_name__contains=q)
# etc.