두서없는 공부 노트/ElasticSearch
ElasticSearch - _analyze API란 [ 예제, 설명 ]
kkm8257
2021. 12. 14. 11:23
반응형
-- 토크나이저는 tokenizer, 토큰 필터는 filter 항목에 값으로 입력하면 된다.
-- 토크나이저는 하나만 적용되기 떄문에 바로 입력하고, 토큰필터는 여러개를 적용할 수 있기 때문에 []안에 배열 형식으로 입력한다.
GET _analyze
{
"text": "The quick brown fox jumps over the lazy dog",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"stop",
"snowball"
]
}
GET _analyze
{
"text": "The quick brown fox jumps over the lazy dog",
"tokenizer": "whitespace",
"filter": [
"stop",
"lowercase",
"snowball"
]
}
-- 위 두가지를 비교해보면 , 필터의 순서가 다른데 lowercase 보다 stop필터를 먼저 사용하게되면 'the'가 정상적으로 지워지지 않는다.
-- 그 이유는 'The' 는 stop 필터에 해당되지 않기 때문. 그 다음 lowercase가 적용되어서 'The'가 'the'로 바뀐다.
-- 그러므로 [ 여러 개의 토큰 필터를 입력 할 때는 순서가 중요하다 ]
-- _analyze API 에서 analyzer 항목으로 적용해서 사용도 가능.
-- 캐릭터 필터, 토크나이저, 토큰 필터를 조합해서 사용자 정의 애널라이저를 만들 수도 있고, ES에 사전에 정의되어 있어서 바로 사용 가능한 애널라이저도 있다.
-- 예를 들면 whitespace 토크나이저, lowercase-stop-snowball 토큰필터들을 조합한 것이 [ snowball 애널라이저 ] 이다. 바로 사용가능
-- 사용자 정의 애널라이저의 방법으로 시도한 위의 코드와 동일한 성능
GET _analyze
{
"text": "The quick brown fox jumps over the lazy dog",
"analyzer": "snowball"
}
-- 인덱스에 애널라이즈 설정 예시
-- 인덱스의 message 필드에 snowball 애널라이저 적용
PUT my_index2
{
"mappings": {
"properties": {
"message": {
"type": "text",
"analyzer": "snowball"
}
}
}
}
-- jumps를 포함하는 도큐먼트 색인
PUT my_index2/_doc/1
{
"message": "The quick brown fox jumps over the lazy dog"
}
-- match 쿼리로 [ jump, jumps, jumping ]을 검색해도 결과가 동일하다.
-- 입력된 검색어는 [ jumping ] 이지만 [ snowball ] 애널라이저를 거쳐 실제로는 [ jump ]로 검색한다.
-- 역 인덱스에는 [ jumps ] 가 [ jump ]로 저장되어있다.
GET my_index2/_search
{
"query": {
"match": {
"message": "jumping"
}
}
}
반응형