2012-11-28 4 views
8

작은 필드 (예 : 지명)에 대해 ElasticSearch를 사용하여 문자 별 자동 완성을 구현하는 표준 방법이 있습니까?ElasticSearch를 사용한 선행 자동 완성 지원

(이 글을 쓰는 시점에서 검색을 통해 많은 토론을 할 수 있지만 결정적인 사항은 없습니다. (또한 Apache Lucene 4에서 자동 완성/제안에 대한 기능 지원 효과에 대한 이야기가 있습니다. .))

감사합니다. 다윗이 쓴 것처럼, 당신은 NGrams을 사용하거나 플러그인을 제안 할 수 있습니다 https://github.com/spinscale/elasticsearch-suggest-plugin

HTH

답변

9

당신은, 가장자리 N- 그램 기반 분석기를 사용 http://www.elasticsearch.org/guide/reference/index-modules/analysis/edgengram-tokenizer.html

를 참조하거나 제안 플러그인을 사용할 수 있습니다. lucene 4를 사용하면 별도의 색인을 작성하지 않고도 더 나은 자동 제안을 즉시 사용할 수 있습니다.

지금 당신은 또한 당신의 필드에 terms facet을하고 관련 접두어로 시작하는 항목 만 유지하는 정규식 패턴을 사용할 수 있습니다

"facets" : { 
    "tag" : { 
     "terms" : { 
      "field" : "field_name", 
      "regex" : "prefix.*" 
     } 
    } 
} 

정규식 그냥 예를 들어, 그것은 할 수 있습니다됩니다 개선되었고 적절한 regex flag을 사용하여 대소 문자를 구분하지 않을 수도 있습니다. 또한 많은 고유 용어가 들어있는 필드의 패싯 만들기는 충분한 메모리가없는 한 좋은 아이디어가 아닙니다.

+0

간단한 사용 예 NGram : https://gist.github.com/988923 –

3

사용 버전 0.90.3 이후 사용할 수 내장 된 자동 완성 SUGGESTER :

http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters-completion.html

그것은 엄청나게 빨리 그리고 정확하게 사용하는 경우에 개발되었다.

+0

BTW @ 사이먼 새 완료 접두사 제안 기능은 0.90.0이 아니라 0.90.3 (아직 실험으로 간주 됨)입니다. https://github.com/elasticsearch/elasticsearch/issues/3376 – Ran

+0

True는 매우 빠르지 만 mySQL LIKE 접두어 * 또는 Redis/CouchBase 자동 완성과 동일한 것입니다. –

+0

답변의 링크가 더 이상 존재하지 않습니다. 이것은 초보자를위한 도움이 될 수 있습니다! http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters.html –

관련 문제