Es gibt drei Möglichkeiten, dies zu tun.
Die erste Möglichkeit besteht darin, eine Abfrage manuell zu erstellen, was QueryParser
intern tut. Dies ist der beste Weg, es zu tun, und bedeutet, dass Sie den Benutzer analysieren müssen Eingang nicht, wenn Sie den Zugriff auf einige der exotischen Eigenschaften von QueryParser
verhindern wollen:
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("filename", "<text>"));
Query query2 = new TermQuery(new Term("filetext", "<text>"));
booleanQuery.add(query1, BooleanClause.Occur.SHOULD);
booleanQuery.add(query2, BooleanClause.Occur.SHOULD);
// Use BooleanClause.Occur.MUST instead of BooleanClause.Occur.SHOULD
// for AND queries
Hits hits = searcher.Search(booleanQuery);
Der zweite Weg ist um MultiFieldQueryParser
zu verwenden, verhält sich das wie QueryParser
und ermöglicht den Zugriff auf die gesamte Leistung, außer dass es mehrere Felder durchsucht.
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
new string[] {"filename", "filetext"},
analyzer);
Hits hits = searcher.Search(queryParser.parse("<text>"));
Der letzte Weg ist, die spezielle Syntax der QueryParser
see here zu verwenden.
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser queryParser = new QueryParser("<default field>", analyzer);
// <default field> is the field that QueryParser will search if you don't
// prefix it with a field.
string special = "filename:" + text + " OR filetext:" + text;
Hits hits = searcher.Search(queryParser.parse(special));
Die andere Option ist neues Feld zu erstellen, wenn Sie Ihre Inhalte Index filenameandtext genannt, in dem Sie die Inhalte von sowohl Dateinamen und filetext zu platzieren, dann haben Sie nur ein Feld zu suchen.
mit dem MultiFieldQueryParser helfen, wie die Abfrage sollte wie folgt aussehen? Können Sie ein Beispiel geben für "" in der Zeile 'queryParser.parse (" ")'? –
alvas
Wie erlaube ich Abfrage für verschiedene Felder mit dem MultiFieldQueryParser? Nehmen wir an, ich möchte nach 'filename: testfile.txt UND filetext fragen:" Singapore food "'. – alvas