Elastic Search를 사용하여 여러 필드에서 검색
Elastic Search를 처음 사용하는데 하나 이상의 필드를 지정하여 검색을 수행할 수 있는 방법이 궁금합니다.
SQL에서는 다음 쿼리를 작성합니다.
"SELECT field1, field2, field3 FROM tablename WHERE field1 = 'X' AND field2 != 'Y' AND field3 = 'Z'"
Elastic Search에서는 다음과 같이 시작합니다.
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*"
}
},
"filter": {
"term" : {
"field1" : "286"
}
}
}
}
}
sql 쿼리는 다음과 같습니다.
{
"query": {
"bool": {
"must": [
{
"term": {
"field1": "X"
}
},
{
"term": {
"field3": "Z"
}
}
],
"must_not": {
"term": {
"field2": "Y"
}
}
}
}
}
어쨌든, 만약 당신이 처음이라면 탄력적인 검색을 시작하기 전에 문서를 조금 읽는 것을 추천합니다.
많은 유형의 쿼리가 있으며, 이들 중 일부는 데이터를 인덱싱하는 방법에 따라 달라집니다. 예를 들어 문자열의 경우 인덱스 시간에 문자열(소문자, 스템 워드, 스톱워드 제거 등)을 분석할 수 있습니다.인덱스 시 필드를 분석하고 소문자로 변환하면 내가 게시한 쿼리는 필드1이 "X"인 문서와 일치하지 않습니다.
탄력 검색을 조금 더 잘 알게 되면 필터를 사용하여 쿼리를 개선할 수 있습니다.
처음에는 어려울 수 있는 작업에 대한 적절한 쿼리를 선택해야 합니다.Bool 쿼리를 사용하여 이미 제안했듯이 모든 종류의 쿼리를 함께 결합할 수 있습니다.또한 여러 필드에서 실행할 수 있으며 내부적으로 부울 쿼리에 매핑할 수 있는 쿼리도 있습니다.또한 용어 쿼리는 텍스트 분석을 지원하지 않기 때문에 프로덕션 시스템에서 그다지 흔하지 않지만, 일반적으로 쿼리하는 필드를 인덱싱하는 방법과 유사한 방식으로 쿼리를 분석하려고 합니다.
Elastic Search에서 가장 일반적인 쿼리 중 하나는 단일 필드에서 작동하는 일치 쿼리입니다.또한 여러 필드에서도 동일한 옵션을 사용하는 multi_match라는 쿼리가 있습니다.이러한 쿼리는 텍스트 분석을 지원하며 매우 잘 작동합니다.예를 들어 query_string 쿼리에서 사용하는 것이 좋습니다.이 쿼리는 훨씬 강력하지만 해석 프로세스가 필요하기 때문에 오류가 발생하기 쉽습니다.query_string은 특정 기능 중 하나(예를 들어 쿼리 자체 내의 필드 이름 또는 부울 연산자 지정)가 필요한 경우에만 사용할 수 있습니다.그렇지 않으면 일치 쿼리를 사용합니다.
쿼리와 필터의 차이를 이해하는 것도 중요합니다.자세한 내용은 여기를 참조하십시오.
또한 쿼리 DSL에서 사용할 수 있는 모든 쿼리를 살펴보고 다양한 작업을 체험해 보십시오.
여러 필드에서 동일한 값을 검색하려면
{"query": {"multi_match": {"query": "querystring", "fields": ["name", "description"]}}}
querystring
Elastic의 Simple 쿼리부터 시작할 것을 제안합니다.SQL과 비슷하고 이해하기 쉽습니다.링크: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html
쿼리 구문은 다음과 같습니다. 예를 들어 이름이 John AND 성 Doe인 게스트를 찾으려는 경우:
GET /_search
{
"query": {
"simple_query_string" : {
"query": "John + Doe",
"fields": ["guest"],
"default_operator": "and"
}
}
}
이 기준 중 하나가 일치하지 않으면 쿼리는 히트를 반환하지 않습니다.또한 여기서 여러 필드를 검색할 수 있지만 한 필드를 검색하는 것보다 속도가 느려집니다.또한 문서에 따르면 단순 쿼리는 논리\검색 연산자로서 특수 기호를 지원합니다.
'+' signifies AND operation | signifies OR operation
'-' negates a single token " wraps a number of tokens to signify a phrase for searching
'*' at the end of a term signifies a prefix query
언급URL : https://stackoverflow.com/questions/18695310/search-on-multiple-fields-with-elasticsearch
'programing' 카테고리의 다른 글
스프링 부트:단위시험에서 액화효소로 시험데이터를 설정하는 방법 (0) | 2023.03.15 |
---|---|
Android에서 HTTP Client를 사용하여 JSON에서 POST 요청을 보내는 방법은 무엇입니까? (0) | 2023.03.15 |
facebook과 같이 로드하는 동안 플레이스홀더를 작성하는 방법 (0) | 2023.03.15 |
클릭 시 Ajax를 사용하여 Wordpress Post를 로드하는 방법 (0) | 2023.03.15 |
케이스 클래스에 필드가 1개뿐인 경우 json을 케이스 클래스로 전환하는 방법 (0) | 2023.03.15 |