0
OK怪異的行爲,Lucene.Net - 在不同勢服務器
,所以我在寫一個搜索我們的網站之一:(點A)
BooleanQuery booleanQuery = new BooleanQuery();
foreach (var field in fields)
{
QueryParser qp = new QueryParser(field, new StandardAnalyzer());
Query query = qp.Parse(search.ToLower() + "*");
if (field.Contains("Title")) { query.SetBoost((float)1.8); }
booleanQuery.Add(query, BooleanClause.Occur.SHOULD);
}
// CODE DIFFERENCE IS HERE
Query query2 = new TermQuery(new Term("StateProperties.IsActive", "True"));
booleanQuery.Add(query2, BooleanClause.Occur.MUST);
// END CODE DIFFERENCE
Lucene.Net.Search.TopScoreDocCollector collector = Lucene.Net.Search.TopScoreDocCollector.create(21, true);
searcher.Search(booleanQuery, collector);
hits = collector.TopDocs().scoreDocs;
這是按預期工作。 由於我們擁有幾個網站,他們使用相同的骨架, 我上傳搜索到另一個網站(站點B) 但搜索停止返回結果。 打一場與代碼了一下,我設法讓後它的工作就像這樣:(只顯示代碼rewriten線)
QueryParser qp2 = new QueryParser("StateProperties.IsActive", new StandardAnalyzer());
Query query2 = qp2.Parse("True");
booleanQuery.Add(query2, BooleanClause.Occur.MUST);
人知道爲什麼會這樣? 我已經檢查了Lucene
的dll版本,並且它在這兩個站點的版本相同(2.9.2.2)
是我寫在站點代碼錯了?是SITE B代碼錯誤? 這是我的錯嗎?可以生產服務器這樣的東西嗎?
他們確實有單獨的索引(總共不同的網站,具有相同的功能),但他們被索引的方式相同,數據也是一樣的,你可以看看它,就像我索引'BOOK A'在兩個索引中都有相同的屬性,但其中一個有效,另一個不起作用。 – Dementic
最近都重新編制索引?意思是,刪除一個文檔並重新生成一個文檔?因爲舊索引條目不會改變,如果你修改索引過程但不重新索引整個事情,但你可能知道,我只是猜測它是你的新代碼的分析器部分,使它工作,一個d在索引文件中得出某種區別。你用盧克檢查了數據嗎? – jishi
jishi是正確的,它與你原來的代碼不起作用的原因是你不用QueryParser解析「True」,它會用StandardAnalyzer處理它,它會將它轉換爲「true」(小寫) –