Эквивалент Solrnet для frange в фасетном запросе Distance

Я внедрил пространственный поиск, и мне нужно создать фасеты для диапазонов или «сегментов» расстояний в Solr: здесь мне помогла следующая ссылка — http://wiki.apache.org/solr/SpatialSearch#How_to_facet_by_distance

Я нашел решение следующего вопроса Расстояние в solr- как генерировать ссылки для поиска в заданном диапазоне расстояний полезно.

Я использую Solrnet для генерации запросов Solr с моего сайта на основе .NET. Я не могу найти ссылку, которая помогла бы мне сгенерировать часть запроса (выделена курсивом), как показано ниже. Пожалуйста, помогите указать мне код для создания этого с помощью solrnet.

&q=:&sfield=store&pt=45.15,-93.85**&facet.query={!frange l=0 u=5}geodist()&facet.query={!frange l=5.001 u=3000 }геодист()**.


person user2112526    schedule 26.02.2013    source источник


Ответы (1)


Я предполагаю, что вы уже используете ExtraParams для установки параметров sField и pt. Вы также должны иметь возможность добавить к этому параметры facet.query.

var results = solr.Query(SolrQuery.All, new QueryOptions
{
    ExtraParams = new Dictionary<string, string> {
                { "sfield", "store" } , 
                { "pt", "45.15,-93.85" }
                { "facet.query", "{!frange l=0 u=5}geodist()" } ,
                { "facet.query", "{!frange l=5.001 u=3000}geodist()" } ,
            }
 });

return results;

Кроме того, вы можете использовать SolrFacetQuery в сочетании с LocalParams для построения фасетных запросов. Проверьте следующие ссылки для некоторых примеров:

Обновление: Как указано в комментариях, использование ExtraParams не работает, поскольку это объект словаря и, как следствие, не допускается использование нескольких параметров facet.query. Тем не менее, я смог использовать Facet Queries, как описано на странице SolrNet Facet Wiki, указанной выше, чтобы создать следующее:

var facet1 = new SolrFacetQuery(new SolrQuery("{!frange l=0 u=5}geodist()}"));
var facet2 = new SolrFacetQuery(new SolrQuery("{!frange l=5.001 u=3000}geodist()}"));
var results = solr.Query(SolrQuery.All, new QueryOptions
    {
        ExtraParams = new Dictionary<string, string>
            {
                {"sfield", "store"},
                {"pt", "45.15,-93.85"}
            },
        Facet = new FacetParameters
            {
                Queries = new[]
                    {
                        facet1, facet2
                    }
            }
    });
return results;
person Paige Cook    schedule 26.02.2013
comment
Спасибо за ответ, Пейдж. Поскольку ExtraParams и LocalParams являются объектами словаря, я не могу дважды передать facet.query. Я пробовал это раньше :(. Я также пробовал SolrQueryByRange, который генерирует диапазон в форме от 1 до 5, который не работает с Solr. Любые дополнительные указатели, пожалуйста. - person user2112526; 27.02.2013
comment
Эти параметры facet.query всегда одинаковы? Вы можете указать их прямо в обработчиках запросов на стороне Solr в разделе по умолчанию. Это обходной путь для дублирования проблем facet.query. - person Alexandre Rafalovitch; 27.02.2013
comment
Я только что разработал образец локально и обновил свой ответ. Кажется, это отправляет правильный запрос в Solr. - person Paige Cook; 27.02.2013