Я использую пользовательский интерфейс Solr Admin для создания этого запроса:
http://localhost:8983/solr/gencat.imagemetadata/select?q=id:"TH-1961-46483-10968-9"&wt=json&indent=true&facet=true&facet.field=externalid
Возвращает:
{
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"id": "TH-1961-46483-10968-9",
"externalid": "100700000_00024"
}
]
},
"facet_counts": {
"facet_queries": {},
"facet_fields": {
"externalid": [
"100700000_00024",
1,
"005471837_00001",
0,
"005471837_00002",
0,
"005471837_00003",
0,
"005471837_00099",
0,
....
]
}
}
}
Мое предположение, что он собирался тольковозвращаемый фасет рассчитывает для одного найденного документа (так как я указываю нужный идентификатор).Вместо этого он возвращает структуру facet_counts
с каждым значением externalid
, индексированным Solr (предоставлено… все записи, кроме одной, равны 0. Количество externalid
для документа, соответствующего запросу, равно 1, как и должно быть).Но мне нужны только подсчеты аспектов Solr для документов в результатах поиска.Не все.Это значительно замедляет запрос.
Да, я могу установить facet.mincount = 1
, чтобы он возвращал только те подсчеты фасетов, у которых действительно есть подсчеты, но под обложками он все равно выглядит так, как будто просматривает все документы.... не только запрашиваемый набор результатов.В настоящее время требуется 2 минуты для выполнения запроса выше для наших 2+ миллиардов элементов.
Когда я поворачиваю tracing on;
в cqlsh, я вижу, что он обрабатывает все 2+ миллиарда элементов.Если бы он только учитывал набор результатов, этот запрос был бы намного, намного быстрее.
externalid
определяется следующим образом в файле схемы:
<field docValues="true" indexed="true" multiValued="false" name="externalid" stored="true" type="StrField"/>
Что я неправильно понимаю?Это замедляет мой запрос из-за того, что мне нужно выйти и найти все внешние идентификаторы, просто чтобы сказать, что они имеют счет 0.
Есть ли способ сказать Solr-огранке только смотреть на документы, найденные извопрос?
Я на Solr 6 под DSE 6.0