0

我会尝试什么

我在内容树中有很多人,我将为此创建一个新索引。这是为了在搜索特定人员时提高 Web 应用程序的性能。


创建索引

我在 Umbraco 7.7 的检查管理器中创建了一个新索引,命名PersonIndexer为索引所有人员。这仅包括人员的节点类型。

来自 Umbraco 的检查经理

为此,我编写了以下代码:

ExamineSettings.config

在→ →标签内的文件ExamineSettings.config内:ExamineExamineIndexProvidersproviders

<add name="PersonsIndexer" 
     type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine" 
     supportUnpublished="false"
     supportProtected="true" 
     indexSet="Persons"
     analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

在同一个文件中,我也添加了这个,但在ExamineExamineSearchProvidersproviders标签内:

<add name="PersonsSearcher" 
     type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine" 
     supportUnpublished="false"
     supportProtected="true" 
     indexSet="Persons"
     analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

ExamineIndex.config

在标签内的文件ExamineIndex.config内:ExamineLuceneIndexSets

<IndexSet SetName="Persons" IndexPath="~/App_Data/TEMP/ExamineIndexes/Persons/" >
    <IndexAttributeFields>
        <add Name="knowledge" />
        <add Name="photo" />
        <add Name="name"/>
        <add Name="firstName"/>
        <add Name="lastName"/>
    </IndexAttributeFields>

    <IncludeNodeTypes>
        <add Name="person" />
    </IncludeNodeTypes>
</IndexSet>

获取文件

当我建立这个索引时,它在索引中有 7 个文档。

建立索引后

我怎样才能在我的视图中获取所有这些文件。我试过这段代码:

var indexer = ExamineManager.Instance.IndexProviderCollection["PersonsIndexer"];

这给了我该索引的所有属性。

快速查看索引器变量


问题

这不是我需要的。所以我的问题是:如何从该索引中获取类型化的文档?


编辑

在@Marks 回答之后,我尝试了他的代码,但是当我观看时,searchResults我得到了这个:

空列表

当我对 Lucene 进行搜索时*,我得到了 7 个结果。

Lucene 搜索 * 给出 7 个结果

当我进行文本搜索 xor 我在空字符串上输入 xor lucene 搜索时,我什么都没有。

4

1 回答 1

2

您需要使用搜索器来检索文档。

这是我用来从索引中检索文档的一些代码的小示例,希望对您有所帮助。

var searcher = ExamineManager.Instance.SearchProviderCollection["PersonsSearcher"];
var searchCriteria = searcher.CreateSearchCriteria();
var query = searchCriteria.Field("nodeTypeAlias", "person").Compile();
var searchResults = searcher.Search(query);

编辑

我已经查看了我的ExamineIndex.config,您必须在 XML 中分别定义默认的 Umbraco 属性和用户定义的属性。

我的一个小例子CustomIndexSet

<IndexSet SetName="CustomIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/Custom/">
    <IndexAttributeFields>
      <add Name="id" />
      <add Name="nodeName"/>
      <add Name="updateDate" />
      <add Name="nodeTypeAlias" />
    </IndexAttributeFields>
    <IndexUserFields>
      <add Name="category" />
      <add Name="title" />
      <add Name="description" />
      <add Name="status" />
      <add Name="keywords" />
    </IndexUserFields>
    <IncludeNodeTypes>
      <add Name="item"/>
      <add Name="category"/>
    </IncludeNodeTypes>
</IndexSet>
于 2017-09-27T08:54:29.520 回答