Elasticsearch는 한 필드에 정확한 일치와 모호한 검색을 동시에 지원하는 방법
2233 단어 ElasticSearch
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
설명: ElasticSearch 5.0 이후string 필드는 두 가지 새로운 데이터 형식으로 분할됩니다. Text: 단어를 구분하고 단어 뒤에 있는 내용에 따라 역방향 인덱스를 만듭니다. (역방향 인덱스) 집합 키워드를 지원하지 않습니다. 단어를 나누지 않고 문자열 내용에 따라 역방향 인덱스를 만듭니다.
ElasticSearch 문자열은 기본값을text와keyword 형식으로 동시에 비추고, 위의name 필드와 같은 동적 비추기 (dynamic mappings) 를 자동으로 만듭니다. ES를 설정하지 않으면 두 가지 형식으로 비추기 때문입니다.
그러나 텍스트 형식에 대해 다른 설정을 하려면, 예를 들어 중국어 분사기를 넣으려면 어떻게 해야 합니까?만약 당신이 Spring-data-Elasticsearch를 사용한다면 이 수요를 실현할 수 있는 두 가지 방법이 있습니다.
1. 수정 필드에 @MultiField 주석 사용하기
@MultiField(mainField = @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart"), otherFields = {
@InnerField(type = FieldType.Keyword, suffix = "keyword") })
Spring-data-elasticsearch의 API 설명서는 다음과 같습니다.https://docs.spring.io/spring-data/elasticsearch/docs/3.1.5.RELEASE/api/
2. @Mapping 메모를 사용하여 Document 사용자 정의 mapping 생성
@Document(indexName = "student", type = "student")
@Mapping(mappingPath = "elasticSearch_mapping.json")
public class Student {
@Id
private String id;
private String name;
}
resource 디렉토리에서 새 elasticSearch_mapping.json.내용은 다음과 같습니다.
{
"student": {
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
기존의 맵핑을 삭제한 후 프로그램을 다시 실행합니다. 새로 생성된 맵핑은 json 파일에 정의된 설정입니다. 이런 방식의 자유도는 비교적 높지만 맵핑에 대한 파악 요구도 비교적 높습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회부록: 1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다. 예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.