私は Alex Shybas Advanced DatabaseCrawler を使用しており、美しく動作しています...ほとんど...次の値を使用して車を検索できる自動車販売アプリケーションに使用しています
型式 メーカー 燃費 価格 年式(登録年月日)
複数の NumericRange クエリがあります。
- -1000 - 0 (これは、オンラインで価格を知りたくないディーラー向けです。彼らは価格を -1 と書きます)
- 下から上へ。(10000 - 20000) これは私がソートしたいものです
どちらも同じ NumericRangeSearchParam() にあります。以下のコードを参照してください。問題は Sitecore.Search.QueryOccurance.Should にあり、lucene は価格制限を完全に無視します。すなわち
返された価格で以下を説明しようとします
下限: 1000 上限: 2000
-1、500、1000、25000
must Nothingあり(さすが)
私は-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;
}