SolR: проверка орфографии полного предложения - PullRequest
2 голосов
/ 18 августа 2011

Я пытаюсь настроить проверку орфографии для автозаполнения полных предложений из моего запроса.

Я уже смог получить следующие результаты:

"american israel" :<br> -> "american something"<br> -> "israel something"

Но я хочу:

"american israel" :<br> -> "american israel something"

Это мой solrconfig.xml:

<searchComponent name="suggest_full" class="solr.SpellCheckComponent">
 <str name="queryAnalyzerFieldType">suggestTextFull</str>
 <lst name="spellchecker">
  <str name="name">suggest_full</str>
  <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
  <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
  <str name="field">text_suggest_full</str>
  <str name="fieldType">suggestTextFull</str>
 </lst>
</searchComponent>

<requestHandler name="/suggest_full" class="org.apache.solr.handler.component.SearchHandler">
<lst name="defaults">
 <str name="echoParams">explicit</str>
 <str name="spellcheck">true</str>
 <str name="spellcheck.dictionary">suggest_full</str>
 <str name="spellcheck.count">10</str>
 <str name="spellcheck.onlyMorePopular">true</str>
</lst>
<arr name="last-components">
 <str>suggest_full</str>
</arr>
</requestHandler>

А это мой schema.xml:

<fieldType name="suggestTextFull" class="solr.TextField">
  <analyzer type="index">  
    <tokenizer class="solr.KeywordTokenizerFactory"/>  
    <filter class="solr.LowerCaseFilterFactory"/>  
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">  
    <tokenizer class="solr.KeywordTokenizerFactory"/>  
    <filter class="solr.LowerCaseFilterFactory"/>  
  </analyzer>
</fieldType>

...

<field name="text_suggest_full" type="suggestTextFull" indexed="true" stored="false" multiValued="true"/>

Я где-то читал, что мне нужно использовать spellcheck.q , потому что q использует WhitespaceAnalyzer, но когда я использую spellcheck.qi, получаю java.lang.NullPointerException

Любые идеи

Ответы [ 4 ]

1 голос
/ 18 августа 2011

Если поля проверки орфографии (text_suggest_full) содержат american something и israel something, убедитесь, что существует также документ / запись со значением american israel something.

Solr не объединитсяamerican something и israel something к одному термину и не будут применять результат к проверке орфографии для american israel.

0 голосов
/ 17 марта 2014

ИМХО, проблема с компонентом проверки орфографии состоит в том, что каждое слово проверяется орфографией по полному индексу. «Сортировка» слов с проверкой орфографии не обязательно соответствует одному документу в индексе, но может происходить из отдельных проиндексированных документов.

0 голосов
/ 17 февраля 2012

Вы можете использовать подсказку / гибкий компонент автозаполнения;у вас должна быть версия 3.X solr

SolrConfig.xml:

 <searchComponent name="suggest" class="solr.SpellCheckComponent">
    <lst name="spellchecker">
    <str name="name">suggest</str>
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
    <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
    <str name="field">name_autocomplete</str>
    </lst>
    </searchComponent>


    <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
    <str name="spellcheck">true</str>
    <str name="spellcheck.dictionary">suggest</str>
    <str name="spellcheck.count">10</str>
    </lst>
    <arr name="components">
    <str>suggest</str>
    </arr>
    </requestHandler>

Shema.xml

<field name="name_autocomplete" type="text" indexed="true" stored="true" multiValued="false" />

Добавить copyField

<copyField source="name" dest="name_autocomplete" />

Перезагрузить solr, переиндексировать все и проверить: http://localhost:8983/solr/suggest?q=&amerspellcheck=true&spellcheck.collate=true&spellcheck.build=true

Получить что-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <lst name="spellcheck">
    <lst name="suggestions">
      <lst name="ameri">
        <int name="numFound">2</int>
        <int name="startOffset">0</int>
        <int name="endOffset">2</int>
        <arr name="suggestion">
          <str>american morocco</str>
          <str>american morocco something</str>
        </arr>
      </lst>
      <str name="collation">american morocco something</str>
    </lst>
  </lst>
</response>

Надеюсь, что помощь

Ура

0 голосов
/ 18 августа 2011

Не будет ли подход с автозаполнением более подходящим?См. эту статью, например

...