2013-05-20 7 views
5

Solr을 사용하여 퍼지 쿼리를 작성하고 있습니다.이 퍼지 쿼리는 맞춤법이 틀린 단어 나 약식 단어가있는 데이터 저장소를 거칩니다. 예를 들어 리포지토리는 "Hlth"라는 단어 (약식 형태의 'Health')를 가진 이름을 가질 수 있습니다. 내가 Name:'Health'~0.35에 대한 퍼지 검색을 할 경우Solzz에서 퍼지 검색

  1. 나는 단어 '건강'이 아닌 'HLTH'에 결과를 얻을 수 있습니다.
  2. Name:'Hlth'~0.35에 대한 퍼지 검색을 수행하면 'Health'및 'Hlth'라는 이름의 레코드가 표시됩니다.

첫 번째 쿼리를 받고 싶습니다. 내 bussiness 유스 케이스에서, 나는 모든 잘못 철자 또는 약식 단어를 쿼리하는 깨끗한 데이터를 사용해야 할 것입니다.

# 1 퍼지 검색이 작동하지 않는 이유와 같은 결과를 얻을 수있는 다른 방법이 있다면 누군가가 도와 주시겠습니까?

답변

4

잘못된 방식으로 퍼지 쿼리를 사용합니다. 마이크 McCandless 말을 무엇에 따르면

(http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html) :

FuzzyQuery이 용어를 일치 "가까운"지정된 기본 용어 : 당신이 기지에서 그 편집 거리 내에서 최대 허용 편집 거리 및 조건을 지정 용어 (및 해당 용어가 포함 된 문서)가 일치합니다.

QueryParser 구문 ~ 나 용어 N은 수정의 최대 허용 개수는 N, 용어이다 (이전 릴리즈에 N을 통해 상응하는 최대 편집 거리로 변환 0.0과 1.0 사이의 혼란 플로트 이었다 까다로운 공식).

FuzzyQuery 적절한 이름을 일치에 좋은 곳입니다 : mkandless (K와 C를 대체) 및 수많은 다른 내가 mcandless ~ 1을 검색 할 수 있습니다 그것은 mccandless (삽입 c)를 일치, mcandles은 ( 의 제거) " 닫기 "용어. 최대 편집 거리 2를 사용하면 최대 2 개의 삽입, 삭제 또는 대체를 사용할 수 있습니다. 각 경기의 점수는 해당 기간의 편집 거리 을 기준으로합니다. 정확한 일치는 가장 높은 점수가 매겨집니다. 편집 거리 1, 낮은; 등

그래서 당신은이 같은 쿼리를 작성해야 - 건강을 ~ 2 당신은 쓰기

+0

이 작동하지 않습니다! Parkway와 Pkwy를 일치시키고 싶었고 그 반대도 마찬가지였습니다. Parkway ~ 2는 Parkway와 Pkwy 만 일치합니다 ~ 2는 Pkwy와 만 일치합니다. –

+0

@Mysterion : FuzzyQuery가 작동하지 않습니다? 그것은 시도했다 = "who is johnn"~ 0.2 – iNikkz

2

:

는 파크 웨이와 파크 웨이 3의 편집 거리를 가지고 "나는 파크 웨이와 파크 웨이와 일치하고 싶었다". 첫 번째 응답에서 "~ 2"에 대해 "~ 3"을 중첩하면이 결과를 얻을 수 있지만 성능상의 이유로 2보다 큰 값에 대해서는 Solr 퍼지 일치를 사용하지 않는 것이 좋습니다.

난 당신의 문제에 접근하는 가장 좋은 방법은 동의어의 컨텍스트 특정 사전을 생성하고 쿼리 시간 확장을 수행하는 것이라고 생각합니다.