Lucene Beispiel-Abfrage
Wenn ich Suche nach Satz "ph1 ph2" er findet Texte, die enthält "ph1" oder "ph2".
String line = "ph1 ph2";
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field, analyzer);
Query query = parser.parse(line);
Jemand weiß, wie man die Suche von 1) Satz ("ph1 ph2"). Beispiel: Dies ist Satz ph1 ph2. 2) der Satz mit der maximalen Distanz("ph1 ph2 ~3"). Beispiel Diese ph1 ist Satz ph2.
P. S ich verwendet standard-Lucene-Indexer index meine Dateien. Wenn dieses Beispiel ist nicht klar, anzeigen http://www.lucenetutorial.com/lucene-query-syntax.html
Hier ist der vollständige code:
String index = "C:/programs/lucenedemo/index";
String field = "contents";
IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index)));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
//QueryParser parser = new QueryParser(Version.LUCENE_40, field, analyzer);
String line = "ph1 ph2";
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field, analyzer);
Query query = parser.parse(line);
//doPagingSearch(searcher, query, hitsPerPage, raw, queries == null && queryString == null);
//doPagingSearch
TopDocs results = searcher.search(query, 300000);
ScoreDoc[] hits = results.scoreDocs;
System.out.println(results.totalHits);
for (int i=0;i<10;i++) {
Document doc = searcher.doc(hits[i].doc);
String path = doc.get("path");
if (path != null) System.out.println((i+1) + ". " + path);
}
//end of doPagingSearch
reader.close();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie möglicherweise verwenden möchten, ein SpanQuery.
Insbesondere können Sie erstellen eine SpanNearQuey, vorbei an den Konstruktor ein array von SpanTermQuerys, eine für jede Ziffer in den Satz, und ein int, die die "Pfütze", oder die maximale Entfernung (sowie einen booleschen Wert, der angibt, ob die Bedingungen müssen in Ordnung sein).
Suchen, verwenden Sie die getSpans Methode auf die Abfrage, die Sie erstellt haben.
Beachten Sie, dass dies wird Ihnen eine Liste aller solcher Erscheinungen, und nicht eine Liste von passenden Dokumenten. Je nachdem, wie Sie möchten, um Ergebnisse zu präsentieren, müssen Sie möglicherweise Durchlaufen die Spannweiten und gruppieren Sie Sie nach Beleg usw.
Ich bin mir nicht klar, was genau Sie suchen, aber ich glaube, es ist einer:
"field:\"" + line + "\""
: Einfache Satz-Abfrage. Finden Sie die zwei angrenzenden bestellte Bedingungen"field:\"" + line + "\"~3"
: Satz-Abfrage Suppe. In Ordnung, aber mit bis zu drei Begriffe im Wert von Trennung in die zwei Begriffe."field:(" + line + ")"
: Nicht eine phrase-query an alle. Einfache Suche für die beiden Begriffe. Jede Bestellung oder Entfernung ist akzeptabel.Können Sie noch weitere Optionen auf den query parser, der die syntax von Lucene ist Abfrage-syntax-Dokumentation