Sitecore的+ Lucene的+ QueryOccurance.Should不返回预期的结果(

2019-09-16 21:47发布

我使用的亚历克斯Shybas高级DatabaseCrawler并且它正在漂亮......几乎......我使用了carsales应用程序中,你可以使用下面的值搜索汽车

造型,使燃油里程定价新年(登记日期)

我有多个NumericRange queryies:

  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;
    }

Answer 1:

我怀疑这可能与所生成的布尔逻辑的事情。 我会在搜索下降了断点它由内部的lucene查询后看看生成的查询值。 再来看一下括号的平衡,以确保有没有放错了地方的必然选择。

您还可以使用卢克来对原始指标执行相同的查询。



Answer 2:

它似乎还有在Sitecore的实现Lucene的方式,这就是为什么我的查询行为这样的错误。



文章来源: Sitecore + Lucene + QueryOccurance.Should not returning desired results