Фильтр Apache Solr не работает, но его можно получить по идентификатору - PullRequest
0 голосов
/ 22 февраля 2019

Справочная информация: У нас есть облачное решение с 3 узлами, которое было перенесено в докер.Он работает, как и ожидалось, однако для новых данных, которые вставляются, он может быть получен только по идентификатору.Как только мы пытаемся использовать фильтры, он не отображается.Обратите внимание, что старые данные по-прежнему могут быть отфильтрованы без каких-либо проблем.

База данных используется через приложение, похожее на подпружиненную загрузку crud.

Дополнительные сведения:

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

Что у меня есть:

Я проверил журналы всехРешите узлы и проследите, чтобы при вызовах приложения происходило следующее:

Фильтрация:

2019-02-22 14:17:07.525 INFO  (qtp15xxxxx-15) [c:content_api s:shard1 r:core_node1 x:content_api_shard1_replica0] o.a.s.c.S.Request
[content_api_shard1_replica0]  
webapp=/solr path=/select 
params=
{q=*:*&start=0&fq=id-lws-ttf:127103&fq=active-boo-ttf:(true)&fq=(publish-date-tda-ttf:[*+TO+2019-02-22T15:17:07Z]+OR+(*:*+NOT+publish-date-tda-ttf:[*+TO+*]))AND+(expiration-date-tda-ttf:[2019-02-22T15:17:07Z+TO+*]+OR+(*:*+NOT+expiration-date-tda-ttf:[*+TO+*]))&sort=create-date-tda-ttf+desc&rows=10&wt=javabin&version=2} 
hits=0 status=0 QTime=37

Получить по ID:

2019-02-22 14:16:56.441 INFO  (qtp15xxxxxx-16) [c:content_api s:shard1 r:core_node1 x:content_api_shard1_replica0] o.a.s.c.S.Request
[content_api_shard1_replica0]  
webapp=/solr path=/get params={ids=https://example.com/app/contents/127103/middle-east&wt=javabin&version=2} 
status=0 QTime=0

Отказ от ответственности:

Я абсолютный новичок в работе с Solr и изучаю документацию по ATM, чтобы лучше понять гайки и болты.

Допущения и WIP:

  • Человек, который перенес его, сказал мне, что были скопированы только данные, а не конфигурация.Я приобрел старые конфигурационные файлы (/opt/solr/server/solr/configsets/) и пытаюсь сравнить их с новыми.Но предполагается, что конфиги были значениями по умолчанию.

  • Старая версия была 6.4.2, а новая - 6.6.5 (не уверен, что это может быть проблемой)

Есть ли что-то очевидное, чего нам здесь не хватает?Суперконфузионность заключается в том, что данные могут быть извлечены с помощью идентификатора И что данные OLD могут быть отфильтрованы

Обновление:

  • После некоторых исследований яДолжен сказать, что я исключил проблему конфигурации, потому что, когда я проверяю конфигурацию из пользовательского интерфейса администратора, я вижу правильную конфигурацию.
  • Также еще одно странное поведение заключается в том, что данные могут быть запрошены через некоторое время (например, более 5 дней).Я вижу это, потому что я запускаю запрос из пользовательского интерфейса и упорядочиваю его по убыванию даты создания.Оттуда я вижу свои тесты, которые я провел не просто несколько дней назад

Соответствующая часть конфигурации коммита:

 <autoCommit> 
   <maxTime>${solr.autoCommit.maxTime:15000}</maxTime> 
   <openSearcher>false</openSearcher> 
 </autoCommit>

 <autoSoftCommit> 
   <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime> 
 </autoSoftCommit>

Дополнительные выходные данные конфигурации от администратораконечная точка:

config:{  
   znodeVersion:0,
   luceneMatchVersion:"org.apache.lucene.util.Version:6.0.1",
   updateHandler:{  
      indexWriter:{  
         closeWaitsForMerges:true
      },
      commitWithin:{  
         softCommit:true
      },
      autoCommit:{  
         maxDocs:-1,
         maxTime:15000,
         openSearcher:false
      },
      autoSoftCommit:{  
         maxDocs:-1,
         maxTime:-1
      }
   },
   query:{  
      useFilterForSortedQuery:false,
      queryResultWindowSize:20,
      queryResultMaxDocsCached:200,
      enableLazyFieldLoading:true,
      maxBooleanClauses:1024,
      filterCache:{  
         autowarmCount:"0",
         size:"512",
         initialSize:"512",
         class:"solr.FastLRUCache",
         name:"filterCache"
      },
      queryResultCache:{  
         autowarmCount:"0",
         size:"512",
         initialSize:"512",
         class:"solr.LRUCache",
         name:"queryResultCache"
      },
      documentCache:{  
         autowarmCount:"0",
         size:"512",
         initialSize:"512",
         class:"solr.LRUCache",
         name:"documentCache"
      },
:{  
         size:"10000",
         showItems:"-1",
         initialSize:"10",
         name:"fieldValueCache"
      }
   },
...

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Согласно вашим примерам вы извлекаете документ только тогда, когда запрашиваете конечную точку get в реальном времени, то есть /get.Эта конечная точка возвращает документы путем запроса по id, даже если документ не был добавлен в индекс или открыт новый поисковик.

Новый поисковик должен быть создан до того, как любые изменения индекса станут видимыми для обычных конечных точек поиска, так как старый поисковик все еще будет использовать старые индексные файлы для поиска.Если новый поисковик не создан, устаревшее содержимое все равно будет возвращено.Это соответствует поведению, которое вы видите, когда вы не открываете никаких новых поисковиков, и контент становится видимым, когда поисковик перерабатывается по другим причинам (возможно, из-за перезапусков / другого явного принятия / слияния / оптимизации / и т. Д.).

Ваш пример конфигурации показывает, что autoSoftCommit отключен, в то время как обычный autoCommit настроен так, чтобы не открывать новый поисковик (и, таким образом, новый контент не отображается).Я обычно рекомендую отключить эту функцию и вместо этого полагаться на использование commitWithin в URL-адресе, так как она обеспечивает большую настраиваемость для различных типов данных и позволяет запрашивать открытие нового поисковика в течение не менее x секунд после добавления данных.,Поведение по умолчанию для commitWithin заключается в том, что новый поисковик будет открыт после совершения коммита.

0 голосов
/ 23 февраля 2019

Похоже, вы могли перейти на управляемую схему по умолчанию при обновлении.Найдите файл schema.xml в предыдущей установке вместе с разделом в вашей предыдущей установке solrconfig.xml.Больше информации на https://lucene.apache.org/solr/guide/6_6/schema-factory-definition-in-solrconfig.html#SchemaFactoryDefinitioninSolrConfig-SolrUsesManagedSchemabyDefault

...