Elastic Stack (8) 썸네일형 리스트형 Bool Query 앞서 알아보았던 Query Context와 Filter Context로는 검색 조건을 맞추기가 불가능하다. 예를 들어 특정 시기 동안 발행된 특정 도서를 검색하기 위해서는 range 쿼리와 match 쿼리 두 가지가 함께 필요하기 때문이다. Bool Query 두 가지 이상의 쿼리를 조합해서 사용할 수 있는 쿼리이다. 항목 설명 스코어링 캐싱 must 항목 내 쿼리에 일치하는 문서를 검색 O X filter 항목 내 쿼리에 일치하는 문서를 검색 X O should 항목 내 쿼리에 일치하는 문서를 검색 O X must_not 항목 내 쿼리에 일치하지 않는 문서를 검색 X O 쿼리의 문서 일치/불일치 여부와 검색된 문서의 스코어 계산 여부, 캐싱 여부에 따라 항목이 나뉜다. 위 특징들을 기준으로 bool q.. Filter Context Term Level Query라고도 부르며 해당 문서에 대한 필터링에 사용되는 쿼리이다. Query Context가 검색어가 문서에 얼마나 매칭되는지를 게산하고 찾는다면, Fliter Context는 검색어의 포함 여부를 찾는 형태이다. 둘 사이의 가장 큰 차이점은 검색어를 analyze 하는지의 여부 Filter Context 종류 종류 내용 term 검색어로 입력한 단어와 정확하게 일치하는 단어가 있는지 찾음 terms term과 유사하지만 여러 개의 단어를 기준으로 하나 이상 일치하는 단어가 있는지 찾음 range 특정 범위 안에 있는 값이 있는지 찾음 wildcard 와일드카드 패턴에 해당하는 값이 있는지 찾음 - term term 쿼리는 정확하게 일치되는 단어를 찾을 때 사용. analyze를 .. Query Context Query Context의 종류 종류 내용 match 검색어가 토크나이징된 토큰들이 존재하는지 여부를 확인 math_pharse match와 비슷하지만 검색어에 입력된 순서를 지켜야 한다 multi_match match와 동작 원리는 같으며 다수의 필드에 검색하기 위해 사용 query_string and와 or 같이 검색어 간 연산이 필요할 때 사용 - match match 쿼리는 Query Context 중에서도 가장 많이 사용되는 쿼리. match 쿼리는 검색어로 들어온 문자열을 analyzer를 통해 분석한 후 inverted index에서 해당 문자열의 토큰을 가지고 있는 문서를 검색한다. ElasticSearch는 analyzer를 통해 해당 검색어를 South와 Korea라는 두 개의 토큰으로.. Query DSL Query DSL 먼저 Query DSL은 크게 Query context, Filter context로 분류할 수 있다. 옵션 내용 Query context Full text search를 의미하며, 검색어가문서와 얼마나 매칭되는지를 표현하는 score값을 가짐 Filter context 검색어가 문서에 존재하는지 여부를 Yes, No 형태의 검색 결과로 보여준다. score값을 가지지 않는다 Query Context Full Text Search라고도 하며, score라는 값으로 검색어와 문서가 얼마나 매칭되는지를 계산한다. analyzer를 활용해서 검색한다. Filter Context 검색어가 문서에 존재하는지 여부를 검사. Yes나 No 형태의 응답만 가능하다. 얼마나 매칭되는지를 의미하는 sco.. Search API Search API Search API는 간단한 형태의 URI Search 형태도 제공하고, RequestBody작성을 통해서 다양한 옵션을 추가한 RequestBody Search 형태도 제공한다. 또한 index_name의 경우에는 한 개 이상의 인덱스를 지정해서 다수의 인덱스에 동시 쿼리를 날릴 수도 있다. 만약 모든 인덱스에 쿼리를 날린다면 _all이라는 형태의 API로 날릴 수도 있다. Search API를 통해 country 필드에 South라는 단어가 들어 있는 문서에 대한 검색을 요청했고 그 결과가 검색되었음을 확인 할 수 있다. RequestBody의 대표적인 옵션들 옵션 내용 query 실제 검색을 위한 쿼리문을 지정 from/size 검색 결과를 n개의 단위로 나눠서 볼 때 사용 so.. analyzer analyzer: inverted index에 저장된 데이터를 만드는 것이 analyzer analyzer의 구성 문자열 chracter filter tokenizer token filter tokens analyzer를 통해 들어온 문자열들은 character filter가 1차로 변경하여 특수 문자들을 제거하고 html태그를 제거하는 등의 문자열을 구성하고 있는 문자들을 특정한 기준으로 변경하고, 변경된 문자열은 tokenizer를 통해 n개의 토큰으로 나뉜다. tonkenizer를 거쳐 n개의 토큰이 생성되면 이 토큰들을 token filter가 다시 한번 변형한다. analyzer를 구성할 때는 tokenizer를 필수로 명시해야 하며 하나의 tokenizer만 설정할 수 있다. 아직 token .. inverted index 토큰: 아래와 같은 문자열을 공백을 기준으로 나누었을 때 생성되는 3개의 문자열을 토큰이라한다. 이러한 토큰을 만들어내는 과정을 토크나이징이라 한다. 검색결과를 얻기 위해서는 토큰이 정확히 일치해야한다. 1. 안녕하세요 만나서 반갑습니다 안녕하세요 만나서 반갑습니다 2. 안녕하세요 처음 뵙겠습니다 안녕하세요 처음 뵙겠습니다 Tokens Documents 안녕하세요 1, 2 만나서 1 반갑습니다 1 처음 2 뵙겠습니다 2 참고문헌: 기초부터 다지는 ElasticSearch 운영 노하우 http://www.yes24.com/Product/Goods/96520155 Text Query 1. match_all 해당 인덱스의 모든 도큐먼트를 검색하는 쿼리이다. 2. match country 필드에 Korea가 포함된 도큐먼트가 검색 결과로 나타남, South Korea로 검색시 마찬가지로 South와 Korea 중 어떤 단어라도 포함되어있으면 검색 결과가 나타난다. 3. match ~ operator url q parameter로 받는 값이 South와 Korea일때 논리연산자가 or, and를 사용할 수 있다. or은 South또는 Korea 둘 중 하나만 포함되어있어도 해당 인덱스의 도큐먼트의 검색결과를 출력하고 and는 South와 Korea 모두 있어야만 해당 인덱스의 도큐먼트의 검색결과를 출력한다. 4. query_string URL검색에 사용하는 문법 5. match_phras.. 이전 1 다음