2012-12-12 2 views
2

Solr Spell Check로 작업하고 있습니다. 알았어. 그러나 어떤 잘못 철자 것은 예상 된 결과를 제공하지 않습니다 :Solr 맞춤법 검사

올바른 단어 : 암

잘못된 맞춤법 : Cacner, cacnar, cancar, cancre, cancere을.

나는 "암"을 "cacnar"에 대한 제안으로 얻지 않고 대신에 "내면"을 보여 주지만 cacner와 비슷한 소리가 정확한 제안이 아닙니다. 그리고 다시 cacnar에 대해서 나는 '폐'라고 제안하고 있습니다.

다른 결과 대신 암을 표시하도록 구성하는 방법은 무엇입니까?

또는 사용자에게 표시하기 전에 참조 할 수있는 제안에 대한 점수가 있습니까? 여기서 요청에 따라

구성이다 (의 schema.xml에서) 사전에 사용되는 필드 :

<fieldType name="text_small" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
     <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.StandardFilterFactory"/> 
     </analyzer> 
    <analyzer type ="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/>  

    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    </analyzer> 
</fieldType> 
(다시에서의 schema.xml) "text_small"의

<copyField source="procname" dest="dtextspell" /> 
<field name = "dtextspell" stored="false" type="text_small" multiValued="true" indexed="true"/> 
정의

solrconfig.xml에서

는 :

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 

<str name="queryAnalyzerFieldType">text_small</str> 
<lst name="spellchecker"> 
    <str name="name">default</str> 
    <str name="classname">solr.IndexBasedSpellChecker</str> 
    <str name="field">dtextspell</str> 
    <float name="thresholdTokenFrequency">.0001</float> 

    <str name="spellcheckIndexDir">./spellchecker</str> 
    <str name="field">name</str> 
    <str name="buildOnCommit">true</str> 

</lst></searchComponent> 

선택 요청 처리기 리튬에 첨부 KE이 : ​​

http://localhost:8080/solr/select?q=*:*&spellcheck=true&spellcheck.build=true 

이 용어를 검색하려면 :

<requestHandler name="/select" class="solr.SearchHandler"> 

<lst name="defaults"> 
    <str name="echoParams">explicit</str> 

    <int name="rows">10</int> 
    <str name="spellcheck.count">10</str> 
    <str name="df">text</str> 
</lst> 
<arr name="last-components"> 
    <str>spellcheck</str> 
</arr> </requestHandler> 

는 맞춤법 검사를 구축하려면

http://localhost:8080/solr/select?q=procname:%22cacner%22&spellcheck=true&defType=edismax 

응답 XML :

<lst name="spellcheck"><lst name="suggestions"> 
    <lst name="cacner"> 
    <int name="numFound">1</int> 
    <int name="startOffset">10</int> 
    <int name="endOffset">16</int> 
     <arr name="suggestion"> 
    <str>inner</str> <end tags start from here> 

는 희망이 도움이! !

+0

맞춤법 검사기를 구성했거나 기본 맞춤법 검사를 사용하고 있습니까? 만약 당신이 어떤 코드를 가지고 있거나 최소한 solr을 쿼리하기 위해 사용하고있는 URL을 볼 수 있습니까? :) –

+0

안녕하세요, 요청한 코드를 추가했습니다. –

+0

@SamueleMattiuzzo 나는 또한 비슷한 문제가 있지만 내 경우에는 조금 다르다 맞춤법 교정 및 제안 잘 작동합니다 .... 이것 좀보세요 ...http://stackoverflow.com/questions/22196793/how-get-suggestions-from-solr-server-in-a-php-variable – Naresh

답변

1

최근에 맞춤법 검사기 색인을 다시 작성하지 않은 것 같습니다. 쿼리 문자열에 spellcheck=true&spellcheck.build=true이라는 쿼리를 추가하여 수동 업데이트를 요청하십시오 (빌드 프로세스가 다소 시간이 걸릴 수 있으므로 모든 요청에서이 작업을 수행하지 마십시오). 또한 올바른 필드를 사용하여 맞춤법 검사기의 색인을 작성하는지 확인해야합니다.

또한 추가 rebuild the index on every commit 또는 on every optimize에 맞춤법 검사기 구성 요소를 구성 할 수 있습니다

<str name="buildOnCommit">true</str> 

또는

<str name="buildOnOptimize">true</str> 

당신의 맞춤법 검사기 구성.

+0

안녕하세요, 저는 현재 작업 중이므로 철자 검사가 반복적으로 만들어졌습니다. . 필자는 다른 샘플 용어에 대해 올바른 철자를 사용하고 있기 때문에 필드도 정확합니다. 나는 곧 나의 코멘트를 포함시키기 위해 나의 대답을 편집 할 것이고, 당신은 한 번 봐보고 뭔가 잘못되었다고 말할 수있다. –

+0

나는 또한 비슷한 문제가 있지만 내 경우에는 조금 다르다 철자 교정 및 제안 잘 작동합니다 .... 이것 좀 봐 ... http://stackoverflow.com/questions/22196793/how-get- 제안 - 솔 - 서버 - 인 - 어 - PHP 변수 – Naresh