Elasticsearch는 한 필드에 정확한 일치와 모호한 검색을 동시에 지원하는 방법

2233 단어 ElasticSearch
요구사항: ES의 특정 필드가 정확한 일치 검색과 모호한 검색을 지원할 수 있도록 하는 방법은 무엇입니까?메서드: 필드의 매핑을 다음과 같이 설정하면 됩니다.
            "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 파일에 정의된 설정입니다. 이런 방식의 자유도는 비교적 높지만 맵핑에 대한 파악 요구도 비교적 높습니다.

좋은 웹페이지 즐겨찾기