私はdjango-taggitでDjango 1.6.1を使用しています。
タグ フィールド以外のフィールドでキーワードを検索するように、検索エンジンを拡張しようとしています。問題は、モデルの名前で icontains 検索のタグを繰り返し処理すると、クエリセットがクエリセットではなくなり、count メソッドが失われ、distinct メソッドが機能しないことです。
views.py:
def index(request):
numresources = Resource.objects.count()
if request.method == 'POST':
form = SearchForm(request.POST)
if form.is_valid():
query = form.cleaned_data['query']
tags = parse_tags(query.lower())
# resourcelist = []
# for tag in tags:
# resourcelist.extend(Resource.objects.filter(name__icontains=tag).filter(isActive=True).order_by('-score').distinct())
# resourcelist.extend(Resource.objects.filter(tags__name__in=tags).filter(isActive=True).order_by('-score').distinct())
# numresults = len(resourcelist)
resourcelist = Resource.objects.filter(tags__name__in=tags).filter(isActive=True).order_by('-score').distinct()
querymade = True
numresults = resourcelist.count()
else:
resourcelist = Resource.objects.filter(isActive=True).order_by('-created')[:100]
else:
resourcelist = Resource.objects.filter(isActive=True).order_by('-created')[:100]
form = SearchForm()
return render(request, 'index.html', locals())
タイトルまたは URL に「django」が含まれるレコードに「django」キーワードを追加する必要があるのは、扱いにくいようです。ユーザーが入力したキーワードとタグが一致する結果だけでなく、入力したキーワードで他のフィールドを検索し、それらのクエリセットを組み合わせて、2 回以上追加された結果を残します。
では、このプロセスのどの時点で、スコアで並べ替えてから重複を削除するのでしょうか?