在文档类型下过滤Lucene搜索结果

时间:2018-03-19 12:13:27

标签: umbraco lucene.net umbraco7

我有类似以下的结构

类别(靴子)

---- itemsForSale(addidas)

类别(袜子)

---- itemsForSale(长)

其中Boots是类别doctype的名称,而Adidas是itemsForSale doctype等的名称。

现在,如果网站的访问者从复选框选项中选择Boots类别,我会将ID传递给搜索页面

访问者还可以通过关键字和最低,最高价格进行搜索。

关键字min,max price选项有效,我只是无法使搜索工作,因此它只显示父项下的项目,即Addidas。

我有以下代码:

ExamineIndex

<add Name="categoryPath"/>

OnGatheringNodeData

private void SetCustomSearchParameters(object sender, IndexingNodeDataEventArgs e)
    {
        var path    = e.Fields["path"];
        path        = path.Replace(",", " ");
        e.Fields.Add("categoryPath", path);
    }

我的搜索结果如下:

 //TODO needs to be fixed so that checkbox search can be done
                    query = searchCriteria.Range("bidPrice", paddedLower, paddedHigher, true, true).And().Field("categoryPath",searchCategory).Or().Field("nodeName",searchCategory.Fuzzy()).Or().Field("nodeName", q.Fuzzy()).Or().Field("description", q.Fuzzy());

但没有结果返回,任何人都可以看到我做错了什么,我重建了索引,但没有运气,当在后台搜索时,我的categoryPath没有显示。

我已阅读以下http://www.attackmonkey.co.uk/blog/2011/12/limiting-an-examine-search-to-the-current-site

https://our.umbraco.org/forum/using-umbraco-and-getting-started/88502-limiting-examine-search-to-one-page-and-its-children

------------- ----------------索引集

<IndexSet SetName="AuctionSearch" IndexPath="~/App_Data/ExamineIndexes/AuctionSearch">
    <IndexAttributeFields>
      <add Name="id" />
      <add Name="nodeName"/>
      <add Name="updateDate" />
      <add Name="writerName" />
      <add Name="nodeTypeAlias" />
    </IndexAttributeFields>
    <IndexUserFields>
      <add Name="description"/>
      <add Name="image"/>
      <add Name="name"/>
      <add Name="bidPrice" EnableSorting="true" Type="DOUBLE"/>
      <add Name="searchBidPrice" EnableSorting="true" Type="DOUBLE"/>
      <add Name="numberOfBids"/>
      <add Name="category"/>
      <add Name="itemsForSale"/>
      <add Name="bidEndDateTime"/>
      <add Name="categoryPath"/>
    </IndexUserFields>
    <IncludeNodeTypes>
      <add Name="itemsForSale" />
    </IncludeNodeTypes>
  </IndexSet>

2 个答案:

答案 0 :(得分:0)

我认为你想要使用的是.GroupedOr,你试过这样的事吗?

query = searchCriteria.Range("bidPrice", paddedLower, paddedHigher, true, true)
    .And().Field("categoryPath",searchCategory)
    .And().GroupedOr(
        new string[] { "nodeName", "nodeName", "description"}
      , new[]{ searchCategory.Fuzzy(), q.Fuzzy(), q.Fuzzy() }
    )
;

答案 1 :(得分:0)

如果有其他人遇到此问题,所有在线示例都会将“路径”显示为“路径”或创建我在我的情况下执行的别名,但它不起作用

就我而言,只有在使用__Path

时才能过滤父母下的子项

工作代码

query = searchCriteria.Range("bidPrice", paddedLower, paddedHigher, true, true).And().Field("__Path", programParent.MultipleCharacterWildcard()).And().GroupedOr(new[] {"description", "nodename"}, q.Fuzzy()).Compile();