2013-11-22 3 views
0

건초 더미 검색의 작동 방식을 이해하고 있습니다.Haystack + Whoosh의 검색 문자열에있는 숫자 및 특수 문자

I 필드 Order.no 차수가 된 형태로 저장되는 'ABC/11분의 2,013/1', 'ABC/11분의 2,013/2'...

I와 모델 오더 하바 Whoosh 백엔드 (django-haystack 2.1.0, celery-haystack 0.7.2, Whoosh 2.5.5, Django 1.6)로 Haystack을 사용하여이 필드에 자동 완성을 구현하려고합니다. 내 search_index.py은 다음과 같습니다 : I 시도

class OrderIndex(CelerySearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name_auto = indexes.EdgeNgramField(model_attr='name') 

    def get_model(self): 
     return Order 

SearchQuerySet().autocomplete(name_auto='ABC/2013') 

내가받을

모두 ABC/11분의 2,013/1, ABC/11분의 2,013/2, 괜찮아요

내가

SearchQuerySet().autocomplete(name_auto='ABC/2013/11') 

을 때 나는 그럴 필요 때 나는 아직도 모두 ABC/11분의 2,013/1, ABC/11분의 2,013/2받을 그리고 그것은 또한 괜찮아요하지만 Y

SearchQuerySet().autocomplete(name_auto='ABC/2013/11/1') 

난 아직도받을 모두 ABC/11분의 2,013/1, ABC/2013 년/10/20 나는 이유를 이해하지 않습니다.

나는 또한 내가

SearchQuerySet().autocomplete(name_auto='1/') 

처럼 '1/ABC/10분의 2,013'에 대한 전체 프로젝트에 대한 ... 쿼리 숫자 형식을 변경할 때

같은 결과가 쿼리를 반환하지 않는 것을 알 수
SearchQuerySet().autocomplete(name_auto='1/ABC') 

'1/ABC/2013/10'과 '2/ABC/2013/10'모두를 반환합니다.

어쩌면 건초 더미 쿼리/검색 문자열의 숫자 및/또는 특수 문자와 관련된 것이 누락 된 것일 수 있습니다. 어떤 도움을 주셔서 감사합니다.

답변

0

이유는 사실 두 가지입니다. 첫째, 슬래시 ("/")는 Whoosh의 예약 된 문자이므로 무시됩니다. 둘째, Whoosh는 단일 문자 검색 용어도 무시합니다. 당신이

를 검색하는 것처럼

그래서 쿼리,

'ABC/2013/11/1' 

슬래시 벗겨 경우,

'ABC 2013 11 1' 

다음 단일 문자,

'ABC 2013 11' 

이 보이는

'ABC/2013/11' -> 'ABC 2013 11' 

재미있는 문서는이 이상한 행동에 대해 엄마가 아닌 것 같습니다.