Я хочу реализовать функцию проверки орфографии в Apache Solr-6.6.4, но не могу этого сделать. Моя программа не предлагает мне правильное слово, которое следует использовать (в запросе Solr).
Имя моей коллекции сотрудник . Я хочу реализовать проверку орфографии для имени поля jobTitleName .
Я сослался на следующую ссылку:
http://akashmusings.blogspot.com/2016/03/spell-check-with-solr.html
Я использую следующие конфигурации.
schema.xml
<uniqueKey>userId</uniqueKey>
<field name="userId" type="string" indexed="true" stored="true" required="false" />
<field name="jobTitleName" type="string" indexed="false" stored="true" required="false"/>
<field name="firstName" type="string" indexed="false" stored="true" required="false"/>
<field name="lastName" type="string" indexed="false" stored="true" required="false"/>
<field name="preferredFullName" type="string" indexed="false" stored="true" required="false"/>
<field name="employeeCode" type="string" indexed="false" stored="true" required="false"/>
<field name="region" type="string" indexed="false" stored="true" required="false"/>
<field name="phoneNumber" type="string" indexed="false" stored="true" required="false"/>
<field name="emailAddress" type="string" indexed="false" stored="true" required="false"/>
<field name="_version_" type="tver" indexed="true" stored="true" />
<dynamicField name="ignored_*" type="ignored" multiValued="true"/>
<dynamicField name="*" type="ignored" multiValued="true"/>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true" />
<fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>
<fieldType name="int" class="solr.IntPointField" docValues="true"/>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" multiValued="true"/>
<fieldType name="double" class="solr.TrieDoubleField" docValues="true" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="tdates" class="solr.TrieDateField" docValues="true" precisionStep="6" positionIncrementGap="0" multiValued="true"/>
<fieldType name="tlongs" class="solr.TrieLongField" docValues="true" precisionStep="8" positionIncrementGap="0" multiValued="true"/>
<fieldType name="tver" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0" />
<fieldType name="tdoubles" class="solr.TrieDoubleField" docValues="true" precisionStep="8" positionIncrementGap="0" multiValued="true"/>
<fieldType name="ignored" stored="false" indexed="false" docValues="false" multiValued="true" class="solr.StrField" />
solrconfig.xml (проверка орфографии)
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text_general</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">jobTitleName</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.5</float>
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">4</int>
<float name="maxQueryFrequency">0.01</float>
<float name="thresholdTokenFrequency">.01</float>
</lst>
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">lowerfilt</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">10</int>
</lst>
</searchComponent>
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck">on</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.alternativeTermCount">5</str>
<str name="spellcheck.maxResultsForSuggest">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">10</str>
<str name="spellcheck.maxCollations">5</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
solrconfig.xml (обновление)
<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">firstName</str>
</lst>
</initParams>
<initParams path="/update/**">
<lst name="defaults">
<str name="update.chain">add-unknown-fields-to-the-schema</str>
</lst>
</initParams>
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text_general</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">jobTitleName</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.5</float>
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">4</int>
<float name="maxQueryFrequency">0.01</float>
<float name="thresholdTokenFrequency">.01</float>
</lst>
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">lowerfilt</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">10</int>
</lst>
</searchComponent>
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck">on</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.alternativeTermCount">5</str>
<str name="spellcheck.maxResultsForSuggest">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">10</str>
<str name="spellcheck.maxCollations">5</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
Требование
Я хочу, чтобы, когда пользователь вводит неправильное jobTitleName, Solr должен выдавать правильную рекомендацию, используя проверку орфографии.
например. Если пользователь вводит Developr как jobTitleName, Solr должен выдать рекомендацию в качестве разработчика пользователю с помощью проверки орфографии.