2012-07-03 3 views
6

난 edgengram와 분석기를 사용하여 (분 = 3, 최대 = 7, 앞면) + term_vector =는Elasticsearch - EdgeNgram + 하이라이트 + term_vector = 나쁜 하이라이트

문서 갖는 텍스트 = "CouchDB를"로

을 with_positions_offsets 내가 "couc"를 검색 할 때

내 하이라이트는


나의 하이라이트는 최소 일치하는 토큰 "COU"w에있는 것 같다 "COU"가 아니라 "couc"에 hile 내가 정확한 토큰 (가능한 경우) 또는 적어도 가장 긴 토큰을 찾길 기대합니다.

그것은 = term_vector로 텍스트를 분석없이 잘 작동 perfomances에 대한

term_vector을 제거하는 효과는 무엇인가 = with_positions_offsets을 with_positions_offsets?

+0

with_positions_offsets의 영향에 대한 해결책이나 답변이있는 사람이 있습니까? –

답변

8

특정 필드에 term_vector=with_positions_offsets을 설정하면 해당 필드에 대해 문서 당 용어 벡터를 저장한다는 의미입니다.

강조 표시와 관련하여 용어 벡터를 사용하면 표준 고속 형광펜보다 빠른 lucene 고속 벡터 형광펜을 사용할 수 있습니다. 그 이유는 표준 형광펜은 색인에 충분한 정보 (위치 및 오프셋)가 없으므로 강조 표시 할 빠른 방법이 없기 때문입니다. 필드 내용을 다시 분석하고 오프셋 및 위치를 가로 채고 해당 정보를 기반으로 강조 표시 만 할 수 있습니다. 긴 텍스트 필드에서는 특히 그렇습니다.

용어 벡터를 사용하면 정보가 충분하므로 텍스트를 다시 분석 할 필요가 없습니다. 단점은 색인의 크기이며 특히 증가 할 것입니다. 나는 Lucene 4.2 용어 벡터가 더 잘 압축되어 최적화 된 방법으로 저장 되었기 때문에 그것을 추가해야합니다. 또한 게시 목록에 오프셋을 저장할 수있는 기능을 기반으로하는 새로운 PostingsHighlighter가 있으며 공간이 훨씬 적습니다.

elasticsearch는 사용 가능한 정보를 기반으로 강조 표시를하는 가장 좋은 방법을 자동으로 사용합니다. 용어 벡터가 저장되면 고속 벡터 형광펜을 사용하고, 그렇지 않은 경우 표준 벡터를 사용합니다. 용어 벡터없이 다시 색인을 생성하면 표준 형광펜을 사용하여 강조 표시됩니다. 속도는 느리지 만 색인은 더 작아집니다.

ngram 필드와 관련해서는 빠른 벡터 형광펜이 ngram 필드를 더 잘 지원해야하므로 설명 된 동작이 이상합니다. 따라서 반대 결과를 기대합니다.

+0

감사합니다. 지금 성능에 대한 영향을 알고 있습니다. 누군가가이 행동을 설명 할 수 있기를 바랍니다. 어쩌면 그것은 ngram 논리가 검색 쿼리에도 적용되기 때문에 그렇다고 할 수 있습니다. –

+1

그것에 대해 생각하지 않았습니다. 그렇습니다. 일반적으로 ngram의 경우 쿼리 시간에 ngrams없이 다른 분석 체인을 사용합니다.그렇지 않으면 쿼리의 ngrams를 너무 많이 만들면 예상되는 이상한 행동보다 더 많은 결과를 얻게됩니다. – javanna

+0

그래, 그럼 그걸 시도해야한다.) –

4

이 질문은 오래 알고 있지만, 아직 완전히대답하지 않은 :

을 당신이 경우 truerequire_field_match을 설정해야합니다 : 같은 이상한 행동을 얻을 수있는 또 다른 옵션이 있습니다

다른 문서 결과가 현재 문서의 강조 표시에 영향을 미치지 않도록하려면 다음을 참조하십시오. http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_match는 필드 이름에 관한 것인데,이 경우와 관련이 없다고 생각한다. 즉, 제목 필드에 대한 쿼리가 있고 제목과 설명을 강조 표시하면 설명 필드의 일치 용어가 강조 표시되지 않고 기본적으로 강조 표시됩니다. – javanna