Abfrage in Lucene
-
14-09-2019 - |
Frage
Die Struktur der Tabelle „Testtable“ ist
-
id int Primärschlüssel
-
productid int
-
attributeId int
-
Wert varchar (250)
Dabei gilt productid die eindeutige ID eines Produkts ist, attributeId ist die eindeutige ID des Attributs eines Produkts, z.B. Größe, Qualität, Höhe, Farbe und ‚Wert‘ ist der Wert für das Attribut
ich habe ein Ergebnis zu filtern. Ich erreiche die Anforderung von dieser Abfrage. Aber ich bin nicht in der Lage, es in einer Abfrage zu machen.
select a.* from dbo.testtable a
where a.attributeId=10 and a.[Value]='Romance'
and productId in
(
select productId
from
dbo.testtable where attributeId =7 and [Value]='Hindi'
)
Sie benötigen Hilfe, um diese Abfrage zu erstellen ..
Lösung
Ich glaube, Sie dies in zwei Schritten zu tun haben:
Schritt 1: Extrakt Produkt-IDs
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery("attributeId", 7), BooleanClause.Occur.MUST);
query.add(new TermQuery("value", "hindi"), BooleanClause.Occur.MUST);
TopDocs docs = searcher.search(query, null, searchLimit);
Sie dann die productId aus der Dokumentation extrahieren müssen
Schritt 2: Starten Abfrage
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery("attributeId", 10), BooleanClause.Occur.MUST);
query.add(new TermQuery("value", "Romance"), BooleanClause.Occur.MUST);
// build "IN" clause
BooleanQuery pidQuery = new BooleanQuery();
for( long productId : productIds ){
pidQuery.add(new TermQuery("productId", productId), BooleanClause.Occur.SHOULD);
}
query.add(pidQuery, BooleanClause.Occur.MUST);
TopDocs docs = searcher.search(query, null, searchLimit);
Andere Tipps
Sehen Sie in Hibernate Search mit dem Sie mit Semantik von Lucene bietet auf Basis einer Datenbank zu suchen. schauen Alternativ zu luke und herauszufinden, wie lucene Ihre Daten indiziert hat. Spielen Sie mit ihm um und es wird Ihnen helfen lucene Abfragen Rahmen, wie es Ihnen einen tieferen Einblick in lucene Indizierung und Suche gibt.