如果我在这里遗漏了一些明显的东西,请提前道歉,因为这是我第一次使用检查,但我目前正在尝试将 jQuery 自动完成调用连接到 Umbraco 中的检查搜索。我需要检查以在属性字段(“nodeName”)和用户字段(“itemNumber”)中搜索搜索词(通过 jquery.autocomplete 提供)。搜索使用我在 ExamineIndex.config 文件中创建的自定义 IndexSet 并设置如下:
<IndexSet SetName="ProductQuickSearchIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/{machinename}/ProductQuickSearchIndex/">
<IndexAttributeFields>
<add Name="id" />
<add Name="nodeName"/>
<add Name="nodeTypeAlias" />
</IndexAttributeFields>
<IndexUserFields>
<add Name="itemNumber"/>
</IndexUserFields>
<IncludeNodeTypes>
<add Name="Product" />
<add Name="Item" />
</IncludeNodeTypes>
</IndexSet>
我还在 ExamineSettings.config 文件中设置了一个 IndexProvider 和一个 SearchProvider,它们都与这个 IndexSet 相关联。
<!-- IndexProvider -->
<add name="ProductQuickSearchIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"
supportUnpublished="false"
supportProtected="true"
analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"
indexSet="ProductQuickSearchIndexSet"/>
<!-- Search Provider -->
<add name="ProductQuickSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" indexSet="ProductQuickSearchIndexSet"/>
jQuery 自动完成调用被路由到处理请求并使用搜索存储库实际执行检查搜索的控制器:
public JsonResult ProductQuickSearch(string term)
{
var searchResults = searchRepository.ProductQuickSearch(term);
// Process results, send back through JSON
}
这是我遇到问题的搜索存储库方法。在查询中,我的目标是让 Examine 在我在 IndexSet 中指定的节点的“nodeName”字段和“itemNumber”字段中搜索搜索词。然而,目前,它只搜索“nodeName”字段,“itemNumber”字段几乎被忽略。
public List<SearchResult> ProductQuickSearch(string searchTerm)
{
var Searcher = ExamineManager.Instance.SearchProviderCollection["ProductQuickSearcher"];
var searchCriteria = Searcher.CreateSearchCriteria(Examine.SearchCriteria.BooleanOperation.Or);
var query = searchCriteria.Field("nodeName", searchTerm).Or().Field("itemNumber", searchTerm).Compile();
return Searcher.Search(query).OrderByDescending(x => x.Score).ToList();
}
任何和所有的帮助表示赞赏。提前致谢!
编辑
看起来,出于某种原因,itemNumber 字段正在触发匹配,但仅当查询是完全匹配时。例如,如果项目编号的示例是 M100.50-000-AE,我可以获得要显示的正确项目,但前提是我的搜索查询是“M100.50-000-AE”并且不小于那个,甚至不是“M100.50-000-A”。因此,通过查询我如何拥有它,正在使用“包含”方法搜索nodeName ,但itemNumber仅通过完全匹配进行搜索。