我正在玩Lucene.net試圖獲得如何在我的應用程序中實現它的句柄。當在搜索中使用多個單詞時,如何在Lucene.net中執行AND搜索?
我有以下代碼
.....
// Add 2 documents
var doc1 = new Document();
var doc2 = new Document();
doc1.Add(new Field("id", "doc1", Field.Store.YES, Field.Index.ANALYZED));
doc1.Add(new Field("content", "This is my first document", Field.Store.YES, Field.Index.ANALYZED));
doc2.Add(new Field("id", "doc2", Field.Store.YES, Field.Index.ANALYZED));
doc2.Add(new Field("content", "The big red fox jumped", Field.Store.YES, Field.Index.ANALYZED));
writer.AddDocument(doc1);
writer.AddDocument(doc2);
writer.Optimize();
writer.Close();
// Search for doc2
var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "content", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
var query = parser.Parse("big abcdefg test1234");
var searcher = new IndexSearcher(indexDirectory, true);
var hits = searcher.Search(query);
Assert.AreEqual(1, hits.Length());
var document = hits.Doc(0);
Assert.AreEqual("doc2", document.Get("id"));
Assert.AreEqual("The big red fox jumped", document.Get("content"));
該測試通過,這dismays我有點。我認爲這意味着Lucene.Net使用OR進行術語之間的搜索,而不是AND,但我無法找到關於如何實際執行AND搜索的任何信息。
我要做的最終結果是,如果有人搜索「馬修安德森」,我不希望它提出引用「馬修多恩」的文檔,因爲這與任何形式都不相關,形狀或形成。
確定這是有道理的。因爲你給了我連續匹配的例子,所以將其標記爲答案。我想我需要編寫一個字符串分析器來將用戶輸入轉換爲正確的lucene查詢字符串,這應該很有趣。 – KallDrexx 2011-05-07 00:39:27
很久沒有問了。如果我想要返回數據,如果有foudn這個詞叫紅色但是大不存在或者大,但是紅色不存在,那麼查詢應該如何。 – Thomas 2014-07-14 09:13:19
@Thomas查詢語法支持用圓括號分組子句。所以,這應該工作:'(+ red-big)(+ big -red)' – 2014-07-14 22:52:18