Lucene suche in Json (CouchDB)

JavaPan

Mitglied
Hallo,

ich verwende Lucene die Lucene-core-3.3.0.jar und lucene-analyzers-3.0.2.jar und damit
durchsue ich meine CouchDB 1.0.1.

Meine CouchDocs sind nach dem Schema aufgebaut:
{
"doc_id" : "1223344",
"doc_type" : "user",
... usw.
"content" : { ... }
}
jetzt habe ich den Code zum durchsuchen:
Java:
q = new QueryParser(Version.LUCENE_30, "content", 
new GermanAnalyzer(Version.LUCENE_30)).parse(querystr);
int hitsPerPage = 10;
IndexSearcher searcher = new IndexSearcher(index, true);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
der querystr ist irgendein Wort das ich an die Methode übergeben kann.
Das funktioniert auch wie gewünscht.
Jetzt möchte ich aber einen bestimmten Key in der Content Map (ich bezeichne die JSON
Parts in der {} Klammer immer als Map da mir mein Svenson parser das in ne Map parst)
z.B. Geschlecht nach dem SuchString "Mann" durchsuchen.
Wie kann ich tiefer in meinem CouchDoc suchen das mir Lucene nur Ergebnisse aus einem
speziellem Key anzeigt am besten wäre natürlich wenn das auch gehen würde das ich angeben kann:
"Content" (1.Key) -> "Profile" (2.Key) -> "Hobbys" == "Fahradfahren" und ich dann alle Docs bekomme
wo ein User in seinem Profil unter Hobbys Fahradfahren stehen hat.
Zur Zeit bekomm ich auch das Doc wenn direkt unter Content Fahradfahren steht.

Danke für Anregungen
 
Ich habs jetzt so gelöst:

Java:
String queryString = "\""+field+" "+suchWort+"\"~3 AND \"doc_Id "+p_d+"\"~3";
Query query = new QueryParser(Version.LUCENE_33, "content", new GermanAnalyzer(Version.LUCENE_33)).parse(queryString);

Hat zwar gedauert und ich dachte es gibt für JSON echt was eleganteres
als diese Lucene Query Language aber ich hab nix besseres gefunden.
Der query der rauskommt sieht so aus:
"Feldname FeldValue"~3 AND "doc_id parameterId"~3
die 3 am ende ist für die Abstände der Key Value Pairs weil die Suche sonst
auch einen Treffer landet wenn das FeldValue am anderen Ende bei einem
völlig anderem Key im JSON steht.
Falls wer noch tolle Ideen dazu hat (ausser alle Felder zu indizieren 😉)
bedanke ich mich schonmal.
 
Gibt es einen Grund, warum du nicht CouchDB nutzt um dir das Gesuchte direkt anzeigen zu lassen?

Also das Map (aus Map-Reduce) nutzt.
 

Zurück
Oben