2013-06-10 1 views
2

최대한 코드 변경을 schema.xml 및 기타 구성 파일로 제한하고 싶습니다. 다음과 같이Solr : 검색 결과가 변경되지 않는 퍼지 연산자

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
<field name="title" type="text_general" indexed="true" stored="true"/> 
<field name="fact" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
<field name="body" type="text_exact_fuzzy" indexed="true" stored="true"/> 

<copyField source="title" dest="text"/> 
<copyField source="body" dest="text"/> 

schema.xml 나중에 text_exact_fuzzy을 정의했습니다 : : 내 schema.xml에 다음 코드를

<text_exact_fuzzy: field type for fuzzy matching --> 
<fieldType name="text_exact_fuzzy" class="solr.TextField" omitNorms="false"> 
<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <!-- 
    <filter class="solr.PorterStemFilterFactory"/> 
    --> 
    <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/> 
</analyzer> 
</fieldType> 

내가 장고보기에서 쿼리를 만들어, 나는 (다음 코드를 사용하여 이는 물결표 표기법을 쿼리를 받아 추가 (예 : ~ 0.8) 쿼리의 각 단어의 끝 부분)에 : 아무리 내가을 설정하는 방법 그러나

fuzzy_clean_text = re.sub(r'\s', '~' + str(fuzzy_index) + ' ', clean_text + ' ') 
#return fuzzy_clean_text 
post_params = [('q', re.escape(json.dumps(fuzzy_clean_text))), 
       ('wt','json'), 
       ('fl', 'fact'), 
       # I've tried the query with and without the following parameter: 
       #('spellcheck.collate', 'true'), 
      ] 
result = urllib2.urlopen(solr_server_url, urllib.urlencode(post_params)) 
response = json.loads(result.read()) 

,이면 쿼리는 동일한 결과를 반환합니다. 또한, 퍼지 검색은 매우 관대하며 관련이없는 텍스트를 특정 fact과 일치시키는 경우가 있습니다. 문제를 해결할 수있는 schema.xml 파일의 쿼리 매개 변수 또는 수정을 통해 다른 방법이 있습니까? 다른 stackoverflow 게시물을 ComplexPhraseQueryParser 제안하지만 내 코드베이스에 자바를 추가하고 싶지 않아 (그리고 어쨌든 이해하기가 꽤 어려워 보인다).

답변

0

나는 같은 문제에 대한 해결책을 찾고 있었다. 몇 가지 문서와 메일 링 포럼을 거친 후이를 직접 구현할 수있는 방법이 없다는 것을 깨달았습니다. 이 방법은 매우 깨끗하고 효율적인 방법은 아니지만 다음은이 문제를 해결 한 방법입니다.

쿼리의 복제본을 만들고 '~'(물결표)를 추가하는 동안 쿼리 사본 물결이 없으면 더 높일 수 있습니다. 결과의 수는 동일하게 유지되며 정확한 일치 만 높은 순위로 매겨집니다.

쿼리 수정으로이를 달성하는 유일한 방법입니다. 다른 방법을 찾았 으면 공유하십시오.

희망이있었습니다. 편집 :

$searchFields = 'firstName^40 firstName~^20'; 

하는 방법이 사용을 중단하지만, 그것의 모습에서, 나는 구문처럼 여러 필드를 넣어 문제가 발생했습니다 생각 나는 왜 기억이 안나 어느. 이제 다양한 가중치를 사용하여 여러 필드에서 검색을 수행 할 때 edismax를 사용하고 위의 문제에서 스키마에서 다른 색인을 사용하여 중복 필드를 사용합니다. 마지막으로 우선 순위에 따라 각 필드 이름에 다른 가중치를 부여하십시오.

+0

사례를 게시 할 수 있습니까? –