我正在尝试使用基本的regex表达式作为执行Django过滤器操作的方式。
我想从提供的查询字符串中删除所有无关紧要的单词,查找标题包含任何剩余单词的对象,然后从包含最多单词的对象开始进行排序。
使用一个简单的示例:
ignored_words = {'for', 'a', 'of', 'the', 'and', 'to', 'in'}
keywords = []
for word in query.split():
if word not in ignored_words:
keywords.append(word)
if len(keywords) > 0:
regex_str = r'(' + '|'.join(keywords) + ')'
results = MyModel.objects.filter(title__iregex=regex_str)
# Now sort them...
如果我的查询字符串是'Delicious Apples and Bananas'
,并且我有三个具有以下标题的对象:
'Apples'
'Bananas'
'Apples and Bananas'
有没有一种有效的方法可以按关键字出现的次数对结果进行排序?更具体地说,我不确定是否应该在查询时进行某种Count()
操作,还是在之后遍历结果并进行其他正则表达式处理。
答案 0 :(得分:0)
最后,我在过滤器之后对QuerySet进行了正则表达式操作。
def get_keyword_matches(query, regex):
compiler = re.compile(regex)
result = compiler.findall(query)
return len(result)
results = sorted(results, key=lambda my_object: get_keyword_matches(my_object.title.lower(), regex_str), reverse=True)
但是,如果有一种更有效的方法,我很想听听。