본문으로 바로가기

ElasticSearch 검색 방법

category Data Science 2016.08.18 14:21

엘라스틱서치의 검색 대상은

전체 인덱스, 하나 이상의 인덱스, 타입별로 검색이 가능하다.

 

테스트를 위해 인덱스는 members 타입은 member로 해서 여러개의 도큐먼트를 만들어 두었다.

 

- 전체 인덱스 검색 수행

> curl 'localhost:9200/_all/_search?q=검색어'

> curl 'localhost:9200/_search?q=검색어'

전체 인덱스 검색을 수행한다 _all이라는 키워드를 적어도 되고, 안 적어도 된다. _search가 검색 명령이다.

* 클러스터에 속한 전체 인덱스에 대한 검색은 성능을 저하시키고, 잘못된 검색 결과를 반영할 수 있으므로 검색엔진 개발시 사용하지 않는 것이 좋다. 

 

- 하나 이상의 인덱스 별 검색 수행

> curl 'localhost:9200/members/_search?q=검색어'

members 인덱스에 대하여 검색을 수행한다.

> curl 'localhost:9200/members,coffees/_search?q=검색어'

members와 coffees인덱스에 대하여 검색을 수행한다.

 

'q=검색어' 만 있는 형태의 질의는 전체 필드를 대상으로 검색한다.

만약 age가 31이고, joindate가 08-31이라면 둘 다 31이 포함이 되기 때문에 검색대상에 포함된다.

 

 

 

 

url 검색에서 사용할 수 있는 매개변수와 명령

 

비고

q(query) 질의 매개변수

 

 

?q=name:james

name필드에 james문자열이 속해 있는 것 만 검색.

 

q질의에 AND, OR 사용

 

 

?q=name:james OR rehana

name필드에 james또는 rehana가 속해 있는 것을 검색.(AND질의도 사용 가능)

유닉스운영체제 명령시에는 공백을url인코딩 값인 %20을 입력해야 함.

ex)q=name:james%20OR%20rehana

df(데이터 필드) 매개변수

 

 

?q=james&df=name

q 질의에 필드명을 넣는데신 df매개변수를 사용해서 검색할 필드를 지정할 수 있다.

 

 

default_operator 매개변수

 

 

?q=james%20rehana&df=name&default_operator=OR

default_operator매개변수를 사용하면 AND,OR연산을 q질의에 넣지 않고 이 매개변수에 지정하여 검색 가능

?q=james%20rehana&df=name

q질의시 검색어를 여러개 지정할 때 공백에 대하여 기본적으로 OR연산을 한다.

explain 매개변수

 

 

?q=age:28&explain

검색처리에 대당 결과의 점수 계산에 사용된 상세 값이 표기된다. 점수가 높은 순대로 결과가 나타난다.

 

_source 매개변수

 

 

?q=name:james&_source=false

_source매개변수의 값을 false로 하면 검색 결과에서 도큐먼트 내용은 표기하지 않고 hit나 점수(score)같은 메타정보만 표기한다.

 

fields 매개변수

 

 

?q=name:james&fields=name,age

전체필드를 보여주지 않고fields매개변수에 지정한 필드들만 결과에 보여준다.

 

sort 매개변수

 

 

?q=james&sort=name

대상 필드에 대하여 정렬된 결과를 보여준다.

내림차순(sort=name:desc)

기본적으로 asc(오름차순)으로 정렬하기 때문에 sort=name이나sort=name:asc나 결과는 같다.

sort 매개변수에 대한 부연설명

만약 name이라는 필드의 문자열 값에 공백이 있다면.. 예를 들어 하나는 Megan Fox이고 하나는 gregori라면asc정렬을 했을 때 gregori가 앞으로 정렬될 것 같지만 반대로 Megan Fox가 앞에 정렬되다. 공백이 있으면 각각의 단어로 보기 때문에 Fox로 인해 더 앞으로 정렬되는 것이다.

 

 

timeout 매개변수

 

 

 

timeout 매개변수로 검색이 수행되는 제한시간을 조정할 수 있다. 지정하지 않으면 제한시간 없이 결과가 나올 때 까지 기다린다.

단위는 밀리초로 지정.

1000이 1초

timeout이 1000이라면 1초후에 검색이 종료되고 1초 동안 검색된 결과만 반영한다.

from 매개변수

 

 

?from=2

검색된 결과를 몇 번째부터 출력할지 지정.

예를 들어 검색결과가 10개인데from=2로 지정했다면 3번째 결과부터 보여준다. 지정하지 않으면 기본값은 0이며,시작값 역시 0부터 시작된다.

size 매개변수

 

 

?size=5

검색된 결과 도큐먼트를 몇 개 까지 표시할지 지정.

지정하지 않으면 기본 10개.

예를 들어 검색결과가 100개가 나와도 표시되는건 10개.

(주의-엘라스틱서치가 전송하는 데이터 용량에 제한이 있는 경우 많은 검색결과를 표시하면 오류가 발생할 수 있음.)

 

 

- search_type 매개변수

search_type은 검색을 수행하는 방법을 지정한다.

지정값은 총 6개가 있다.

 query_then_fetch - 전체 샤드가 검색이 다 수행된 후 결과를 출력. 결과를 size매개변수에서 지정한 갯수만큼 출력

 query_and_fetch - 샤드별로 검색되는 대로 결과를 받아 출력. size매개변수에서 지정한 갯수만큼 샤드별로 검색하므로 size 10이고, 샤드의 갯수가 5라면 전체출력 결과는 샤드당 10개씩 5*10 = 50개의 도큐먼트 출력

 dfs_query_then_fetch - query_then_fetch와 같으며, 스코어(score)처리를 위해 검색어를 사전 처리

 dfs_query_and_fetch - query_and_fetch와 같으며, 스코어(score)처리를 위해 검색어를 사전 처리

 count - 도큐먼트 정보를 제외하고 hits수만 출력, 제일 빠른 속도

 scan - 검색결과를 바로 보여주지 않으며, scroll이라는 곳에 저장했다가 _scroll_id를 사용해 결과를 출력


댓글을 달아 주세요