我有一个包含各个领域的 Lucene 文档;Name、BriefData、FullData、ParentIDs(逗号分隔的字符串)、ProductType、Experience。
我有一个带有文本框、父母下拉列表、产品类型下拉列表、体验下拉列表的搜索表单。
如果我从文本框中搜索,我会得到我应该得到的结果。如果我从任何下拉列表(或所有下拉列表)中搜索,我会得到我想要的结果。如果我使用下拉菜单和文本框,我会得到所有结果作为文本框或下拉菜单的搜索。我想要的是文本框和下拉菜单。
所以,我的搜索建立了这样的东西:
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());
如果我只搜索文本框和下拉父项,我会得到一个搜索词“north +ParentIDs:62”
我想要的是搜索只返回父级为 62 AND(名称或 BriefData 或 FullData 的“北”)的结果。
我尝试创建“+(Name:north BriefData:north FullData:north) +ParentIDs:62”和“Name:north BriefData:north FullData:north +ParentIDs:62”的 searchTerm。第一个不返回任何结果,第二个返回与仅搜索 +ParentIDs:62 相同的结果。
我认为这背后的逻辑很简单。但是,我不知道我需要用代码编写什么。
请帮忙。:)