Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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多词全文搜索_Python_Django_Postgresql - Fatal编程技术网

Python Django多词全文搜索

Python Django多词全文搜索,python,django,postgresql,Python,Django,Postgresql,据我所知,这不是一个真正复杂的问题 我知道在MongoDB中,您可以输入一个字符串,它会自动标记并使用该字符串作为查询执行全文搜索 然而,在Django中,我还没有找到类似的功能,我所看到的所有示例都按照以下思路做了一些工作: from django.contrib.postgres.search import SearchQuery query = SearchQuery('foo') 人们只使用一个词的原因是因为SearchQuery只能使用一个词吗 我想知道的是如何使用多个单词进行全文搜

据我所知,这不是一个真正复杂的问题

我知道在MongoDB中,您可以输入一个字符串,它会自动标记并使用该字符串作为查询执行全文搜索

然而,在Django中,我还没有找到类似的功能,我所看到的所有示例都按照以下思路做了一些工作:

from django.contrib.postgres.search import SearchQuery
query = SearchQuery('foo')
人们只使用一个词的原因是因为SearchQuery只能使用一个词吗

我想知道的是如何使用多个单词进行全文搜索。这和做一件事一样容易吗

from django.contrib.postgres.search import SearchQuery
query = SearchQuery('foo and also bar')

??或者它需要比这更复杂吗?

您可以在
SearchQuery
中使用多个单词。如果不需要按术语的逻辑组合进行搜索,您甚至可以取消SearchQuery:

Entry.objects.annotate(
     search=SearchVector('body_text'),
).filter(search="Multiple words query")

要使用Django执行全文搜索,您必须使用
GiN index
SearchVector
相结合

这是我在某处用过的东西。它也适用于查询中的2+个单词,并在3个字段中搜索它们。

这是我最初的想法,但由于某些原因,我在查询中包含的术语没有被使用。例如,如果我有一个字段值为“Blah building,college”的文档,并且使用一个查询“Blah building”,则没有匹配。@Quontas尝试在postgresql中直接执行相同的操作。搜索时遇到的问题是,当我有一个向量“foo and bar”和一个查询“foo but baz”时,查询无法按预期运行. 在我看来,包含向量的文档应该在搜索查询时找到,但它不会出现。不,不应该,你的向量不包含单词“but”。我明白了。是否有任何方法可以让我的查询行为,以便根据向量和查询中匹配的单词数对结果进行排序,即使查询中有无关的单词?我认为使用纯Django no。至少我没有设法解决这个问题。可以看看搜索引擎,比如Haystack+Whoosh(用于开头)或Solr,或者ElasticSearch(更复杂)。是的。但如果有一天你能找到解决这个问题的方法,请告诉我,我的一个项目也有同样的问题:)