2017-05-27 7 views
0

Ich bin neu zu solr. Ich bin verwirrt, ob ich q oder fq verwenden soll. Angenommen, ich habe einige Felderohne Begriff aus Ergebnissen in Solr Abfrage

  • Zustand (mögliche Werte: kerala, Delhi, west_bengal etc)
  • Titel
  • processed_title
  • Beschreibung
  • etc

die indizierten fileds sind state , title, , description

Ich will Ergebnisse für

boiler keyword (all matches) in state delhi and also boiler keyword (exclude repair) in kerala

Eine Lösung für dieses denke ich

q=((boiler AND state:delhi) OR (boiler AND -repair AND state:kerala))

Andere Lösung könnte

q=boiler&fq=(state:gujarat OR (state:kerala AND -processed_title:repair -title:repair -description:repair))

sein Ich habe zu schreiben json interafe in python für die Abfrage. Die JSON kann aussehen wie (unten Wörterbuch ist nur ein Beispiel)

{ q: 'boiler', filter: { state: kerala, price: [10 TO 100] } } Meine Fragen sind:

  1. ist es in Ordnung, alles in q oder besser zu schreiben sowohl q und fq zu verwenden oder gibt es eine Annäherung ??
  2. Wenn ich eine JSON-Schnittstelle API schreiben möchte, die einfache Möglichkeit ist, Abfragen 1 oder 2 zu erstellen oder gibt es eine bessere Lösung?

Ich verwende Solr 4.10.

Dank

Antwort

0

Es ist viel besser, sowohl q und fq zu verwenden. Sie geben in fq an, was zum Ausfiltern von Dokumenten verwendet wird (das Ergebnis ist binär, entweder ein Dokument ist ein oder aus), und Sie geben q ein, wonach Sie suchen möchten (dies ist eher schrittweise, ein Dokument kann alle Schlüsselwörter und ein anderes Dokument enthalten) Wenn du alles in fq schreiben kannst, tu das, q = *: * ist vollkommen in Ordnung.

Unterschiede sind:

  • fq nicht Punktzahl nicht beeinflusst, nur Dokumente herausfiltert. q beeinflussen Noten
  • fq sind im Cache (es sei denn, Sie fragen es nicht zwischengespeichert werden), so dass im Gegenzug einer anfänglichen Strafe, nächste Abfragen mit der gleichen fq wird viel schneller sein. Dies ist der größte Deal.

In Bezug auf die JSON Api Frage, verstehe ich nicht wirklich, was meinst du.

0

Eine gute Faustregel ist die Verwendung von fq, wenn Ihr Feld einen festen Satz von Werten hat.In Ihrem Fall sollte der Status in der Nähe sein. q wird bei der Berechnung des solr-Scores verwendet. Ein höherer Punktestand bedeutet eine bessere Übereinstimmung. Sie können mehr lesen here.

fq wird bei der Berechnung der Punktzahl nicht verwendet. Ein Dokument in SOLR hat entweder den Status Kerala oder nicht.

Angenommen, Sie haben drei Dokumente in Ihrem System.

doc1: {'title':'idli idli idli','state':['kerala','karnataka']} 
doc2: {'title':'idli','state':['kerala']} 
doc3: {'title':'paneer','state':['punjab']} 

für idli und Zustand kerala abfragen, Sie

q=idli&fq=kerala 

Das ist ein bisschen simpel, aber Solr eine höhere Punktzahl für doc1, weil es mehrere Instanzen des Wortes idli hat als doc2 zurückkehren würde verwenden würden, . fq beeinflusst nicht (und sollte nicht) die Punktzahl. Entweder hat ein Staat idli oder es nicht