Результаты Solr q против результатов sql базы данных - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь настроить solr для индексации базы данных oracle. Я включил ведущий поиск по шаблону и различные другие фильтры как таковые в моем schema.xml

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
       maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Я проиндексировал все доступные для поиска столбцы в базе данных и использую те же имена, что и имена столбцов для полей solr, и, следовательно, мой запрос на выборку в db-data-config.xml - это просто элемент select * from view;

Мы получаем разные результаты от запросов solr и базы данных

например, SQL-запрос, как показано ниже, возвращает 1307 записей

select count(*) from VIEW 
where (COLUMN1 = 'Value0' and COLUMN2='Value1') 
OR COLUMN3 in ('Value2','Value3','Value4') 
AND COLUMN4='Value5'

и запрос solr, как показано ниже, возвращает только 7

  (COLUMN1:(Value0) AND COLUMN2:(Value1)) 
  OR (COLUMN3:(Value2 OR Value3 OR Value4))
  AND (COLUMN4:(Value5)) 

Мы работаем только с 1 представлением, которое имеет все необходимые данные. Конфигурации solr индексируют все столбцы в представлении, и я бы подумал, что результаты будут аналогичными. Может ли кто-нибудь любезно объяснить несоответствие?

РЕДАКТИРОВАТЬ

Добавление значений в соответствии с запросом: solr query

COUNTRY_NAME:(United States) AND ELEMENT_CODE:(CT)) OR (UNIT_STATUS:(Operating OR Order OR Shipped)) AND (FRAME_GR_DISPLAY:(06A)) 

запрос к базе данных

select * from VIEW where 
(COUNTRY_NAME = 'United States' AND ELEMENT_CODE='CT')
 OR  UNIT_STATUS in ('Operating','Order','Shipped') 
   AND FRAME_GR_DISPLAY='06A'

1 Ответ

1 голос
/ 16 декабря 2011

Вообще говоря, если вы хотите дословные совпадения, как в SQL, вам не следует использовать анализируемый тип поля.Например, в схеме по умолчанию тип поля string (класс solr.StrField) не анализируется.

Если вы потерялись в фильтрах анализа и токенизаторах и не совсем поняли, что происходит, попробуйте использовать debugQuery= в вашей строке запроса Solr или используйте инструмент анализа Solr .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...