我有一個帶有各種字段的Lucene文檔;名稱,BriefData,FullData,ParentIDs(逗號分隔字符串),ProductType,體驗。lucene.net搜索具有一個值的多個字段以及具有其他值的其他字段
我有一個搜索表單,有一個文本框,父母的下拉列表,產品類型的下拉列表,經驗下拉列表。
如果我從文本框搜索,我會得到我應該的結果。如果我從任何下拉菜單中搜索(或全部),我會得到我想要的結果。如果我使用下拉列表和文本框,我將所有結果作爲文本框或下拉列表的搜索。我想要的是文本框和下拉菜單。
所以,我的搜索建立像這樣:
if (string.IsNullOrWhiteSpace(searchTerm))
{
searchTerm = "";
if (!string.IsNullOrWhiteSpace(Request.QueryString["textbox"]))
{
string tester = Request.QueryString["query"];
searchTerm += tester;
}
if (!string.IsNullOrWhiteSpace(Request.QueryString["parent"]))
{
searchTerm += searchTerm.Length > 0 ? " " : "";
searchTerm += "+ParentIDs:" + Request.QueryString["parent"];
}
if (!string.IsNullOrWhiteSpace(Request.QueryString["product"]))
{
ProductTypes pt = db.ProductTypes.Find(int.Parse(Request.QueryString["product"]));
if (pt != null) {
searchTerm += searchTerm.Length > 0 ? " " : "";
searchTerm += "+ProductType:" + pt.TypeName;
}
}
if (!string.IsNullOrWhiteSpace(Request.QueryString["experience"]))
{
searchTerm += searchTerm.Length > 0 ? " " : "";
searchTerm += "+Experience:" + Request.QueryString["experience"];
}
}
if (!Directory.Exists(Helper.LuceneSearch._luceneDir))
Directory.CreateDirectory(Helper.LuceneSearch._luceneDir);
_searchResults = string.IsNullOrEmpty(searchField)
? Helper.LuceneSearch.Search(searchTerm).Distinct()
: Helper.LuceneSearch.Search(searchTerm, searchField).Distinct();
return View(_searchResults.Distinct());
如果我僅搜索文本框,下拉父母,我得到的搜索關鍵詞「北方+ ParentIDs:62」
我想是的只搜索返回結果,其父母爲62 AND(姓名或簡要數據或「北」的全數據)。
我試着創建一個「+(名稱:north BriefData:north FullData:north)+ ParentIDs:62」和「Name:north BriefData:north FullData:north + ParentIDs:62」的searchTerm。第一個返回沒有結果,第二個返回相同的只是搜索+ ParentIDs:62。
我認爲這背後的邏輯非常簡單。但是,我不知道我需要用代碼編寫什麼。
請幫忙。 :)
您使用哪種分析儀?你是否也確定你已經在指定的字段中編入了包含「north」的數據? –
我不知道分析儀。我的搜索代碼已發佈。 –
我絕對有北索引。如果我在北部搜索,那麼我會從各個字段(名稱,簡要數據,全部數據)中獲得所有結果。 –