0

如果我在这里遗漏了一些明显的东西,请提前道歉,因为这是我第一次使用检查,但我目前正在尝试将 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仅通过完全匹配进行搜索。

4

1 回答 1

0

首先,检查您的自定义索引以确保该字段在其中。为此,请转到开发人员部分并单击“检查管理”选项卡。从索引器列表中选择您的索引,选择“用户字段”,然后检查您的自定义字段是否已列出。

接下来,单击搜索器,并尝试搜索应设置该字段的页面,您应该能够查看搜索结果中的字段。

如果它没有显示出来,那是索引本身的问题,否则,它可能是你的代码中的问题,尽管你的代码看起来不错。搜索词是否应该在 itemNumber 字段中匹配?

于 2016-04-06T15:21:17.607 回答