2013-01-13 3 views
0

*something과 같은 검색이 엄청난 양의 CPU를 소비한다는 것을 알고 있습니다. 나는 2.4.1을 사용하고있다. 이 검색 케이스를 다루는 색인이 없기 때문에 이것이라고 생각합니다. something*이 정상적으로 작동합니다. *something 아닙니다.와일드 카드 검색의 성능 문제 (* 무언가)

어떻게 이러한 쿼리를 처리합니까? 이런 종류의 쿼리를 가능하게하는 스키마를 선언하는 특별한 방법이 있습니까?

감사합니다.

답변

1

그건 아주 근본적인 문제입니다 : 접두어는 일반적으로 찾기 쉽습니다 (foo *를 검색 할 때처럼), 접미어는 (* foo와 같이) 없습니다.

접두사 + 와일드 카드 검색은 첫 번째 단계에서 주어진 결과에 대해 빠른 접두어 검색과 느린 와일드 카드 검색을 먼저 수행하도록 최적화됩니다.

Wildcard + Postfix로 최적화 할 수 없습니다. 그러나 트릭이있다 :

당신이 정말로 필요한 경우가 종종 그럴 수 후위 검색 접두사 검색가되도록, 반전 된 문자열 색인 (또한 반전 검색 문자열 검색) 시도 :

어떻게 든 같은 :

add_document(title=title, title_rev=title[::-1]) 
... 
# then query = u"*foo"[::-1], search in title_rev field.