【问题标题】:Sitecore + Lucene + QueryOccurance.Should not returning desired resultsSitecore + Lucene + QueryOccurance。不应返回所需的结果
【发布时间】:2012-04-30 13:50:52
【问题描述】:

我正在使用 Alex Shybas Advanced DatabaseCrawler,它运行良好……几乎…… 我正在使用汽车销售应用程序,您可以在其中使用以下值搜索汽车

型号 制作 燃料 里程 价格 年份(注册日期)

我有多个 NumericRange 查询:

  1. -1000 - 0(这是给那些不想在线价格的经销商。他们将价格写为-1)
  2. 从下到上,即。 (10000 - 20000) 这是我要排序的

两者都在同一个 NumericRangeSearchParam() 中,请参见下面的代码。 问题在于 Sitecore.Search.QueryOccurance.Should,因为它使 lucene 完全无视价格限制。即

我将尝试在下面用返回的价格来说明

下限:1000 上限:2000

应该 -1, 500, 1000, 25000

必须 什么都没有(如预期的那样)

我不应该只得到 -1 和 1000 的应该出现吗?

我希望你们中的一个人能帮忙,因为这让我发疯了!

代码如下:

    public List<SkinnyItem> DoSearch(CarSearchParameters parameters, string sortby, bool reverse, string indexName)
    {
        Database db = Sitecore.Context.Database;
        string  id = db.GetItem(SitecoreHelper.GetBilSalgsItem().Paths.FullPath+"/"+ Helpers.URLEncoder.ToFriendlyUrl(parameters.Make) + (!string.IsNullOrEmpty(parameters.Model) ? "/" + Helpers.URLEncoder.ToFriendlyUrl(parameters.Model) : ""), LanguageManager.GetLanguage("da")).ID.ToString();
        var param = new CombinedSearchParam()
        {
            FullTextQuery = "",
            Language = "da",
            LocationIds = id,
            RelatedIds = "",
            ShowAllVersions = false,
            TemplateIds = ""

        };
        Item settings = Helpers.SitecoreHelper.GetSettings();

        Sitecore.SharedSource.Search.Searcher searcher = new Sitecore.SharedSource.Search.Searcher(indexName);
        var items = new List<SkinnyItem>();

        //Tilføjer felter med værdier -Make -Model -Trim
        var fields = new FieldValueSearchParam();
        fields.Refinements.Add("Make", parameters.Make);
        fields.Occurance = Sitecore.Search.QueryOccurance.Must;

        if(parameters.Model != string.Empty)
            fields.Refinements.Add("Model", parameters.Model);
        if(parameters.Fuel != string.Empty)
            fields.Refinements.Add("Fuel", parameters.Fuel);

        //Tilføjer Numeriske ranges
        var km = new NumericRangeSearchParam();
        km.Ranges.Add(new NumericRangeSearchParam.NumericRangeField("KM", 0, parameters.MaxKM));

        //Angivet som must fordi at den skal være mellem disse værdier
        km.Occurance = Sitecore.Search.QueryOccurance.Must; 

        //Tilføjer 2 Ranges da bilen enten skal være mellem det valge range eller mindre end 0
        var price = new NumericRangeSearchParam();
        price.Ranges.Add(new NumericRangeSearchParam.NumericRangeField("Price", -1000, 0));
        price.Ranges.Add(new NumericRangeSearchParam.NumericRangeField("Price", parameters.StartPrice, parameters.EndPrice));

        //Should da den bare skal være en af dem (Svarer til ||, OR)
        price.Occurance = Sitecore.Search.QueryOccurance.Should;

        //Tilføjer datointervallet
        var dates = new DateRangeSearchParam();
        dates.Ranges.Add(new DateRangeSearchParam.DateRangeField("ModelDate", new DateTime(parameters.StartYear, 1, 1, 0, 0, 0), new DateTime(parameters.EndYear,12, 31, 23, 59, 59)));
        dates.Occurance = Sitecore.Search.QueryOccurance.Must;

        param.DateRanges.Add(dates);
        param.NumericRanges.Add(price);
        param.NumericRanges.Add(km);
        param.FieldValues.Add(fields);

        //Checker om der er angivet sortering
        if (sortby != null)            
            items.AddRange(searcher.GetItems(param, new Sort(new SortField(sortby, reverse))));
        else
            items.AddRange(searcher.GetItems(param));
        return items;
    }

【问题讨论】:

    标签: lucene lucene.net sitecore sitecore6


    【解决方案1】:

    我怀疑这可能与生成的布尔逻辑有关。在搜索器组成其内部 lucene 查询后,我会在搜索器中放置一个断点并查看生成的查询值。然后查看括号的平衡,以确保没有将 Must 放在错误的位置。

    您还可以使用Luke 对原始索引执行相同的查询。

    【讨论】:

      【解决方案2】:

      Sitecore 实现 Lucene 的方式似乎存在错误,这就是我的查询出现这种情况的原因。

      【讨论】:

      • 证明这一点的唯一方法是直接在 API 中执行 lucene 搜索并比较结果。由于大多数 Sitecore 东西都是顶部的包装器。我们在我们所在的地方使用它,所以我很想看看你是否发现它对我们有影响! :)
      猜你喜欢
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      相关资源
      最近更新 更多