2017-09-10 1 views
1

Weiß jemand, welches Plugin (mit Django) ist besten für dynamische Suchanfragen wie StackOverflow? Etwas like this:Dynamische Suche wie Stackoverflow für Django

<input type="text" value="how to [django] or [python] duplicate:yes is:answer" style="width: 50%"> 

Ich denke nur über komplexe Abfragen.

query = request.GET.get('q') 

text_query = # what regex here? 
tags_query = # 
is_duplicate = re.search(r'(?P<duplicate>\w+)', query) 

Question.objects.filter(...) 
Answer.objects.filter(...) 
+0

kein Plugin ist wirklich notwendig. Es könnte relativ einfach mit Regex gehandhabt werden. Fragen Sie, wie die obige Abfrage als Beispiel behandelt werden könnte? – Jonathan

+0

@ Jonathan ah ja ... können Sie ein Beispiel geben, wie man das macht? etwas, wie man 'text_query = 'wie zu' findet und sonst. –

Antwort

0
query = "how to [django] or [python] or [mu] duplicate:yes is:answer" 

tags = re.search(r'\[(\w+)\]((or \[(\w+)\])+)?', query) 
colons = re.findall(r'\w+:\w+', query) 

search = query.replace(tags.group(), '') 
for colon in colons: 
    search = search.replace(colon, '') 

print(search) # how to 

Dann können Sie separat Tags und Doppelpunkte zur Abfrage verarbeiten.

Wenn Sie die Fragen-Datenbank nach allen Begriffen in der Suchanfrage durchsuchen möchten, können Sie so etwas tun. Es wird der gesamte Text gefunden, der alle Suchbegriffe enthält.

search = search.split() 

db_query = Q(text__icontains=search[0]) 
for term in search[1:]: 
    db_query = db_query | Q(text__icontains=term) 

Question.objects.filter(db_query) 
+0

wie über 2 oder 3 Fragen? zB: 'query =" linke seite [django] oder [python] oder [du] duplizieren: ja ist: antwort rechte seite "', also hier haben wir 'linke seite' und' rechte seite' .. wenn Ich folgte deiner Antwort und bekam '' linke Seite '' (mit Leerzeichen) _. Wie kann ich ''linke Seite rechts' 'einzeln identifizieren? –

+0

@sanca hätte die rechte Seite irgendeine semantische Bedeutung? Wenn Sie die Abfrage im Stackoverflow durchführen, ist das egal. Es wird nach den Einträgen suchen, die 'linke Seite rechte Seite' enthalten. – Jonathan

+0

@SancaKembang Ich habe die Antwort ein wenig mehr aktualisiert, wie die Abfrage auf der Datenbankseite aussehen würde. – Jonathan