gpt4 book ai didi

python - haystack 多字段搜索

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:20 25 4
gpt4 key购买 nike

您好,我正在使用带有 woosh 的 haystack 作为搜索引擎:

我的模型如下所示

class Person(models.Model):
personid = models.IntegerField(primary_key = True, db_column = 'PID')
firstname = models.CharField(max_length = 50, db_column = 'FIRSTNAME')
lastname = models.CharField(max_length = 50, db_column = 'LASTNAME')
class Meta:
db_table = '"TEST"."PERSON"'
managed = False


class TDoc(models.Model):
tdocid = models.IntegerField(primary_key = True, db_column = 'TDOCID')
person = models.ForeignKey(Person, db_column = 'PID')
content = models.TextField(db_column = 'CONTENT', blank = True)
filepath = models.TextField(db_column = 'FILEPATH', blank = True)
class Meta:
db_table = '"TEST"."TDOC"'
managed = False

search_index.py如下:

class TDocIndex(SearchIndex):

content = CharField(model_attr = 'content', document = True)
filepaht = CharField(model_attr = 'filepath')
person = CharField(model_attr = 'person')

def get_queryset(self):
return TDoc.objects.all()

def prepare_person(self, obj):
# Store a list of id's for filtering
return obj.person.lastname

site.register(TDoc, TDocIndex)

我的问题是我想做多个归档搜索

content:xxx AND person:SMITH

在 haystack 上它一次搜索所有这些我不能进行特定字段搜索。我怀疑我的索引已损坏但是:

ix = open_dir("/testindex")

searcher = ix.searcher()

mparser = MultifieldParser(["content", "filepath", "person"], schema = ix.schema)
myquery = mparser.parse(content:xxx AND person:SMITH')
results = searcher.search(myquery)
for result in results:
print result

但它有效并返回正确的值。我正在使用教程中的标准 haystack SearchView、search.html

(r'^search/', include('haystack.urls')),

最佳答案

在您的索引中,您应该使用 document=True 定义一个字段,这是 haystack 将搜索的文档。按照约定,此字段名为 text。如果您计划对它们的值进行过滤或排序,您可以添加额外的字段。

执行搜索时考虑多个字段的方法是将文档定义为模板,并在文档字段上设置 use_template。你的索引看起来像:

class TDocIndex(SearchIndex):

text = CharField(document=True, use_template=True)

#if you plan to filter by person
personid = IntegerField(model_attr='person__id')

site.register(TDoc, TDocIndex)

你会有一个 search/indexes/tdoc_text.txt 模板,例如:

{{ object.content }}
{{ object.filepath }}
{{ object.person.lastname }}

参见 this回答。

关于python - haystack 多字段搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469952/

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