사용자가 다른 사람을 이름으로 찾을 수있는 텍스트 필드가 웹 앱에 있습니다. 상자에 입력을 시작하면 입력 할 때 서버가 가능한 일치 항목을 보냅니다. 나는 간단한 검색 인덱스와 건초 더미/SOLR 백엔드를 설정 : django-haystack의 단어 경계를 넘나들며 자동 완성
class UserIndex(SearchIndex):
text = NgramField(document=True, model_attr='get_full_name')
site.register(BerlinrUser, UserIndex)
가 그럼 난 manage.py build_solr_schema을 실행 한 후 마지막으로 manage.py update_index을 실행, 내 solf/conf 디렉토리에 스키마를 복사 SOLR 다시 시작합니다.
q = request.GET.get("q")
search_result = SearchQuerySet().models(User).autocomplete(content=q)
for result in search_result:
# Collect user IDs, pull from database, and send back a JSON result
문제는 자동 완성 내가 원하는 반환하지 않는다는 것입니다 : 내 장고보기에서
, 나는 다음 검색 코드가 있습니다. 사용자의 컬렉션을 감안할 때 :Query: Expected result:
"John" "John Smith",
"John Jingleheimer-Schmidt"
"Smith" "John Smith",
"Jenny Smith"
"Smi" "John Smith",
"Jenny Smith"
"J" <Anybody with a first or last name that begins with "J">
"John Sm" "John Smith"
참고 "일치와 반대로, 아무것도 반환하지"들은 SMI OHN "쿼리에 대한 허용 : 여기
John Smith
John Jingleheimer-Schmidt
Jenny Smith
내가 원하는 행동입니다 존 스미스".
그러나 Haystack/Solr을 사용하면 "Smi", "J"및 "John Sm"이 결과를 전혀 반환하지 않습니다. Haystack/Solr이 어떤 것을 반환하도록하려면 전체 단어를 사용해야합니다. Haystack 문서에 따르면 NgramField를 사용하여 단어 경계를 일치시켜야하지만 그렇게하는 것은 아닙니다. 어떤 아이디어?