2014-11-13 7 views
0

여기 퍼지 일치로 인해 검색어의 단어 목록과 일치하는 단어의 60-70 %를 가진 문서를 찾습니다.Whoosh 쿼리 된 단어 목록의 퍼지 일치

예 :

>> #(Query string as passed by user) 
>> query = i am searching for a document that is matched fuzzily with what i am giving here. 
>> QueryParser("content", ix.schema).parse(query) 

이 쿼리는 모든 단어가있는 문서를 찾습니다하지만 난 위의 단어의 최소 60 % 이상 포함 된 모든 문서를 찾고 싶어요.

내가 처리 할 단어 수가 많아서이 단어 집합을 프로그래밍 방식으로 다른 집합 (ORing 용)으로 분할하지 않으려합니다.

답변

0

이것은 Whoosh에 Not implemented yet (확인 됨 28/05/2015)으로 보입니다.

그러나 [whoosh.query.Or][1]의 문서에서는, minmatch 인수에 대한 레퍼런스가 :

클래스 whoosh.query.Or (서브 쿼리, 과급 = 1.0 minmatch = 0, = 스케일 없음)

매개 변수 :

  • 하위 쿼리 - 검색 할 쿼리 개체의 목록입니다.

  • 부스트 - 일치하는 모든 문서의 점수에 적용 할 부스트 요인.

  • minmatch-아직를 구현하지.

  • 스케일 - "조정 보너스"를위한 스케일링 팩터. 이 값이 None이 아니면 0보다 크고 1보다 작은 부동 소수점 숫자 여야합니다. 일치하는 문서의 점수는 문서에서 일치하는 쿼리 용어의 수를 기준으로 증가/불이화됩니다. 이 숫자는 보너스의 효과를 조정합니다. 이 솔루션은이 경우

    from math import ceil 
    from whoosh.query import Or, Term 
    raw_query = "i am searching for a document that is matched fuzzily with what i am giving here." 
    min_ratio = ceil(len(raw_query) * 3.0/5.0) 
    query = Or([Term("content", word) for word in raw_query.split()], minmatch = min_ratio) 
    

    처럼 whould 그래서 우리가 minmatch을 생각하면

, 당신은 필터링을 중지 무시하거나하기 전에 쿼리에서 중지 단어를 필터링해야하는 최소한의 검색 키워드입니다 쿼리의 길이를 계산합니다.