2016-04-13 3 views
0

Я пытаюсь получить уникальные значения для поля из solr. Я использовал фасет для получения значений полей. Мои пары фаски запроса выглядит как-Значение поля Facet возвращает одно и то же значение несколько раз с помощью анаграммы

 SolrQuery query = new SolrQuery(); 
     query.setQuery("*:*"); 
     query.setFacet(true); 
     query.addFacetField("division"); 

Я распечатывающие фасеты using-

resp = solrClient.query(query); 

      List<FacetField> fflist = resp.getFacetFields(); 
      for(FacetField ff : fflist){ 
       String ffname = ff.getName(); 

       int ffcount = ff.getValueCount(); 

       System.out.println(ffname+" "+ffcount); 
       List<Count> counts = ff.getValues(); 
       for(Count c : counts){ 
        String facetLabel = c.getName(); 
        long facetCount = c.getCount(); 

        System.out.println("facetlabel-->"+facetLabel+" facetcount-->"+facetCount); 
       } 
      } 

я получаю следующий ответ на this-

facetlabel-->seirossecca facetcount-->184 
facetlabel-->accessori facetcount-->184 
facetlabel-->seirossecca facetcount-->184 
facetlabel-->cinht facetcount-->116 
facetlabel-->cinht facetcount-->116 
facetlabel-->ethnic facetcount-->116 
facetlabel-->spot facetcount-->851 
facetlabel-->spot facetcount-->851 
facetlabel-->top facetcount-->851 
facetlabel-->raewtoof facetcount-->577 
facetlabel-->footwear facetcount-->577 
facetlabel-->raewtoof facetcount-->577 
facetlabel-->smottob facetcount-->387602 
facetlabel-->bottom facetcount-->387602 
facetlabel-->smottob facetcount-->387602 
facetlabel-->ytuaeb facetcount-->354158 
facetlabel-->beauti facetcount-->354158 
facetlabel-->ytuaeb facetcount-->354158 
facetlabel-->scinortcel facetcount-->204244 
facetlabel-->electron facetcount-->204244 
facetlabel-->scinortcel facetcount-->204244 
facetlabel-->sesserd facetcount-->161 
facetlabel-->dress facetcount-->161 
facetlabel-->sesserd facetcount-->161 

Как вы можете видеть, что я получение анаграммы гранного поля с отдельными записями, но соответствующее значение поля такое же. Отдел имеет тип-

text_search

Текст определения поиска в schema.xml является OF-

<fieldType name="text_search" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true" multiValued="true"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.ReversedWildcardFilterFactory"/> 
      <filter class="solr.PorterStemFilterFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="0" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="0" preserveOriginal="1"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.PorterStemFilterFactory"/> 
      <filter class="solr.ReversedWildcardFilterFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="0" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="0" preserveOriginal="1"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 
+0

Я думаю, что это из-за fieldType, применяемого для поля деления ... Вы, пожалуйста, разделите fieldType, используемый для разделения поля ... –

+0

Тип поля для деления - ArrayList. –

+0

Проверьте это в вашем schema.xml ... найдите полевое подразделение и проверьте, какой тип поля используется? Проверьте, какой тип анализатора он содержит? –

ответ

2

Это происходит потому, что вы используете ReversedWildcardFilterFactory.

ReversedWildcardFilterFactory: Фильтр, который меняет маркеры.

То же самое происходит для вас ..

seirossecca является обратной accessories и accessories сокращается до accessori из PorterStemFilterFactory, как она удаляет общие концовки из слов.

Для этого вы можете удалить ReversedWildcardFilterFactory у вас schema.xml.

PorterStemFilterFactory : 

предоставляется вам, если хотите, если удалить общие окончания из слов.

Смежные вопросы