0

최대 절전 모드 검색 5.8 및 ES 5.5를 사용하여 최대 절전 모드 검색과 Elasticsearch의 통합을 구현했습니다. 정렬을 위해 특별히 만들어진 여러 필드가 있는데, 모두 [필드] 정렬이라고합니다.최대 절전 모드 검색과 함께. 키워드 접미사가있는 필드 만들기

nameSort -> text 
nameSort.keyword -> keyword 

내가 정렬의 접미사 필드를 사용한다는 것을 깨달았다 : 나는 로컬로 테스트 할 때

, 나는 Hibernate가 인덱스를 만들 수 있도록 처음,이 같은 문자열 정렬 필드가 작성. 그러나 Elasticsearch 클러스터를 삭제할 때 처음부터 다시 시작해야했지만 접미사 필드를 만들지는 않았으며 정렬 필드를 키워드로 직접 만들었습니다. 다시 5 번 이상 클러스터를 다시 만들었으며 접미어 필드를 다시 만들지 않았습니다.

마지막으로 변경 내용을 스테이징 환경으로 보냈을 때 키워드 필드 대신 텍스트 필드별로 정렬을 시도하기 때문에 접미어 필드가 다시 만들어져 내 쿼리가 실패하게됩니다.

이제는 종종 접미사를 만드는 이유와 때로는 알 수없는 경우가 있습니다. 규칙이 있습니까? 2 개의 필드를 생성하는 것을 피하고 내가 준 이름과 정확히 일치하는 키워드 필드를 하나만 만들게하는 방법이 있습니까? 사전에 어떤 도움

@Field(name = "nameSort", analyze = Analyze.NO, store = Store.YES, index = Index.NO) 
@SortableField(forField = "nameSort") 
public String getNameSort() { 
    return name != null ? name.toLowerCase(Locale.ENGLISH) : null; 
} 

감사 :

여기 정렬 필드의 예입니다.

답변

1

하이버 네이트 검색은 텍스트 필드를위한 별도의 키워드 필드를 만드는 것과 같은 일을하지 않습니다. 필드 분석 여부에 따라 텍스트 필드 또는 키워드 필드를 만듭니다. 귀하의 경우 필드는 분석되지 않으므로 키워드 필드를 작성해야합니다.

이제 최대 절전 모드 검색은 여기에만있는 것이 아니며,이 동작은 Elasticsearch 클러스터 자체에서 비롯 될 수 있습니다. Elasticsearch 클러스터에 특정 색인 템플릿이 있는지 확인 했습니까? Hibernate Search가 텍스트 속성을 생성 할 때마다 Elasticsearch가 키워드 필드를 생성 할 수 있습니다.

Hibernate Search 5.8에서는 getName() getter에 직접 주석을 달고 소문자 변환을 직접하지 않을 수있는 노멀 라이저 (Elasticsearch 노말 라이저와 동일한 것)를 정의 할 수 있다는 사실에 흥미를 느낄 수 있습니다. 자세한 내용은 this blog post을 참조하십시오.

+0

빠른 답변 주셔서 감사합니다. ES 클러스터에서 필드 생성에 대한 구성이 있는지 확인하겠습니다. 나를 위해 가장 이상한 부분은 이미 키워드 필드로 간주되는이 분석되지 않은 필드에 대해 실제로 텍스트 형식의 필드를 만들었다는 것입니다. – andrehil