如果我错过了一些显而易见的事情,请提前道歉,因为这是我第一次使用Examine,但我目前正在尝试将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
}
以下是我遇到问题的搜索存储库方法。在查询中,我的目标是在&#34; nodeName&#34;中检查搜索词。字段和&#34; itemNumber&#34;我在IndexSet中指定的节点的字段。但是,目前,只搜索&#34; nodeName&#34;字段和&#34; itemNumber&#34;字段几乎被忽略。
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,我可以显示正确的项目,但仅当我的搜索查询是&#34; M100.50-000-AE&#34;而不是那个,甚至不是&#34; M100.50-000-A&#34;。因此,通过查询我的方式,使用&#34; contains&#34;来搜索 nodeName 。方法,但 itemNumber 仅按完全匹配进行搜索。
答案 0 :(得分:0)
首先,检查您的自定义索引以确定该字段在那里。要执行此操作,请转到开发人员部分,然后单击&#34;检查管理&#34;标签。从索引器列表中选择索引,选择&#34; user fields&#34;然后检查您的自定义字段是否已列出。
接下来,点击搜索器,尝试搜索应该设置该字段的页面,您应该能够看到搜索结果中的字段。
如果它没有显示,那么索引本身就会出现问题,否则,它可能是您代码中的内容,尽管您的代码看起来还不错。搜索词是否应该在itemNumber字段中匹配?