RavenDB - граненый поиск и создание крошек / URL-адресов фильтров в mvc3 - PullRequest
2 голосов
/ 24 января 2012

Я использую mvc3 и RavenDB. У меня есть меню фильтров, где пользователи могут сузить их поиск с использованием граненого поиска, как описано здесь: http://ravendb.net/docs/client-api/advanced/faceted-search

Мне нравится этот шаблон URL: /filter/{manufacturer}/{resolution}/{zoom} Например: /filter/canon/6 означает список всех камер производителя канона с мегапиксель 6 (и все диапазоны увеличения).

У меня это работает, но я сталкиваюсь с проблемами при создании URL. Это будет только работать, если значения фасетов безопасны для использования в URL, например. заменить все амперсанды, пробелы и т. д. с чертой и строчными буквами все. Это означает, что я в конечном итоге с «некрасивыми» именами в моих ссылках на меню фильтра и сухарями.

Есть ли способ иметь понятное имя для отображения пользователю для значения фасета? поэтому я могу создать URL-адрес, как это:

<a href="/filter/canon/">Canon USA (12)</a>
<a href="/filter/canon/6/">6 megapixels (5)</a>

Одним из решений, которое я могу придумать, было бы сохранение фильтров в виде документов и просто найдите значение фасета, чтобы получить его отображаемое имя.

Фильтр документа может выглядеть так:

var filter = new Filter
                 {
                   DisplayName = "Manufacturer" ,
                   Slug = "manufacturer" ,
                   Items = new List< FilterItem >
                        {
                            new FilterItem() { DisplayName = "Canon USA" , Slug = "canon" } ,                    
                            new FilterItem() { DisplayName = "Photo's & more" , Slug = "photos-and-more" }
                        }
                 } ;

1 Ответ

1 голос
/ 24 января 2012

Андрей, да, это, вероятно, то, что вы хотите сделать.В общем, так как вы контролируете значения, вы можете контролировать, какими они будут, но нет причин усложнять ситуацию в глобальном масштабе.Вы можете просто хранить значения где-то и отображать между ними.Вокруг было бы легче.

...