찾다
기술 주변기기일체 포함ChatGPT를 사용하여 ElasticSearch dsl을 빠르게 시작하세요

借助ChatGPT快速上手ElasticSearch dsl

SQL 플레이어로서 ElasticSearch를 접한 후 어떤 시나리오에서 bool 필터를 중첩해야 하는지, 언제 bool 쿼리가 필요한지, 언제 사용할 수 있는지 등 dsl의 이상한 쓰기 방식에 고민했습니다. 제거됩니다. 문제를 해결할 때 dsl을 직접 작성하는 것은 불가피하며 ES 오류가 자주 발생합니다.

이 문제를 해결하기 위해 ChatGPT에서 번역을 시켜봤는데 효과가 꽤 좋았습니다. 시나리오대로 살펴보자.

시나리오 1: 목록 퍼지 쿼리

B측 백엔드 시스템의 목록 페이지에서는 일반적으로 많은 필터 상자를 볼 수 있습니다. 제품 관리자는 종종 "더 나은 사용자 경험"이라는 필터 상자에 ID 및 이름별 퍼지 일치 기능을 넣습니다. SQL로 작성하면 매우 간단합니다.

select * from user where client_id = 123 anduser_id like '%张三%' or user_name like '%张三%';

MySQL에 저장하는 경우 client_id 인덱스를 추가하면 필터링되는 데이터의 양을 크게 줄일 수 있으며 성능도 크게 나쁘지 않습니다.

데이터 양이 너무 많으면 ES를 사용하세요. ChatGPT에 다음과 같이 물어볼 수 있습니다.

질문 시작:

ES 인덱스 이름 "user", 세 개의 필드

  1. user_id string
  2. user_name string
  3. client_id 정수

client_id = 123 및 (user_name = 'Zhang San' 또는 user_id = 'Zhang San') 조건으로 레코드를 쿼리하고 싶습니다. DSL을 어떻게 작성해야 합니까?

응답 시작:

다음 조건을 충족하는 "user" 인덱스의 레코드를 쿼리하려면 client_id = 123 및 (user_name = 'Zhang San' 또는 user_id = 'Zhang San')을 수행하면 됩니다. 달성하기 위해 용어 쿼리와 결합된 부울 쿼리를 사용합니다. 다음은 해당 DSL 쿼리의 예입니다.

GET /user/_search{"query": {"bool": {"filter": [{"term": {"client_id": 123}},{"bool": {"should": [{"term": {"user_name": "张三"}},{"term": {"user_id": "张三"}}]}}]}}}

이 쿼리에서는 부울 쿼리를 사용하여 지정된 기준이 문서를 필터링하는 데 사용되는지 확인합니다.

filter 절에는 두 가지 조건이 있습니다. 하나는 쿼리라는 용어를 사용하여 "client_id" 필드의 값이 123인 조건입니다. 두 번째 조건은 should 절이 포함된 중첩된 bool 쿼리입니다. should 절에는 두 개의 용어 쿼리가 포함되어 있습니다. 하나는 "user_name" 필드에 대한 것이고 다른 하나는 "user_id" 필드에 대한 것입니다. 두 쿼리 모두 값이 "Zhang San"인지 확인합니다. should 절을 사용하면 조건 중 하나라도 일치해야 함을 나타냅니다.

이 DSL 쿼리는 client_id가 123이고 사용자 이름이 "Zhang San"이거나 사용자 ID가 "Zhang San"인 문서 레코드를 반환합니다.

답변 끝:

ChatGPT는 답변을 제공했을 뿐만 아니라 설명도 제공했습니다. 비즈니스의 인덱스를 약간 수정하면 됩니다.

시나리오 2: 집계 결과를 기준으로 필터링

위의 사용자 테이블을 기반으로 처리된 작업 주문을 나타내는 ticket_id 필드를 추가하여 100개 이상의 작업 주문을 처리한 사용자를 찾고 싶습니다. SQL은 다음과 같이 작성할 수 있습니다.

select user_id, max(user_name) as user_name,count(ticket_id) as ticket_cnt from user where client_id = 123having count(ticket_id) > 100;

Ask ChatGPT:

질문 시작:

ES 인덱스 이름 "user", 다음 필드 포함:

  1. user_id string
  2. user_ 이름 string
  3. client_id int
  4. ticket_id

user_id에 따른 집계, count(ticket_id) > 100의 user_id, user_id

에 해당하는 user_name을 쿼리합니다. 답글 시작:
팔로우하려면 "user_id" 필드 집계, 조건 count(ticket_id) > 100을 충족하는 "user_id"를 쿼리하고 해당 "user_name"은 집계 쿼리에서 용어 집계 및 bucket_selector 파이프라인 집계를 사용하여 구현할 수 있습니다. 해당 DSL 쿼리 예는 다음과 같습니다.

GET /user/_search{"size": 0,"aggs": {"users": {"terms": {"field": "user_id","size": 10,"min_doc_count": 101// 设置最小文档数,只返回 count(ticket_id) > 100 的聚合结果},"aggs": {"user_name": {"terms": {"field": "user_name","size": 1}},"ticket_count": {"value_count": {"field": "ticket_id"}},"bucket_filter": {"bucket_selector": {"buckets_path": {"count": "ticket_count"},"script": "params.count > 100"// 仅保留 count(ticket_id) > 100 的聚合桶}}}}}}

在这个查询中,我们使用了 terms 聚合对 "user_id" 字段进行分组,并在聚合结果中嵌套了 user_name 字段的 terms 聚合和 ticket_id 字段的 value_count 聚合。

在 terms 聚合中,我们设置了 min_doc_count 参数为 101,以仅返回满足 count(ticket_id) > 100 的聚合桶。这样可以过滤掉不满足条件的聚合结果。

最终,我们使用 bucket_selector 管道聚合来进行桶过滤,仅保留满足条件 params.count > 100 的聚合桶。这样,最终的聚合结果中将只包含满足条件的 "user_id" 和对应的 "user_name"。

请注意,根据您的具体需求,您可能需要根据实际情况调整聚合查询中的参数和设置,如设置合适的 size 值来控制返回的聚合桶数量等。

回复结束。

场景三: 聚合以后取topK

向ChatGPT提问:

提问开始:

ES index 名字 "user",包含以下字段:

  1. user_id string
  2. user_name string
  3. client_id int
  4. ticket_id

我要查询处理ticket数量top10 的 user_id 以及对应的user_name

回复开始:
要查询处理 ticket 数量排名前 10 的 "user_id",以及对应的 "user_name",可以使用 terms 聚合和 top_hits 子聚合来实现。以下是相应的 DSL 查询示例:

GET /user/_search{"size": 0,"aggs": {"top_users": {"terms": {"field": "user_id","size": 10,"order": {"ticket_count": "desc"}},"aggs": {"user_name": {"terms": {"field": "user_name","size": 1}},"ticket_count": {"value_count": {"field": "ticket_id"}},"top_user_hits": {"top_hits": {"size": 1}}}}}}

在这个查询中,我们使用了 terms 聚合对 "user_id" 字段进行分组,并按照 "ticket_count" 字段的降序对分组结果进行排序。

在 terms 聚合中,我们设置了 size 参数为 10,以仅返回前 10 个处理 ticket 数量最多的 "user_id"。

在每个聚合桶中,我们还嵌套了 user_name 字段的 terms 聚合和 ticket_id 字段的 value_count 聚合,分别用于获取对应的 "user_name" 和计算 ticket 数量。

此外,我们使用了 top_hits 子聚合来获取每个聚合桶中的匹配文档的详细信息。在这里,我们设置了 size 参数为 1,以仅获取每个聚合桶中的一条文档信息。

最终,聚合查询的结果将包含处理 ticket 数量排名前 10 的 "user_id",对应的 "user_name",以及每个用户最新的一条文档信息。

请注意,根据实际情况,您可能需要根据具体需求调整聚合查询中的参数和设置,如设置合适的 size 值来控制返回的聚合桶数量,以及添加其他的聚合或过滤条件等。

回复结束。

本着快速出活/快速解决问题的心态,ChatGPT确实提升了工作效率。不过在解决需求之后,还是要补补课,了解下ElasticSearch的用法和工作机制。因为ChatGPT是语言模型,一旦逻辑复杂起来,ChatGPT就开始瞎说了。

위 내용은 ChatGPT를 사용하여 ElasticSearch dsl을 빠르게 시작하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 51CTO.COM에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
외삽에 대한 포괄적 인 가이드외삽에 대한 포괄적 인 가이드Apr 15, 2025 am 11:38 AM

소개 매일 몇 주 만에 작물의 진행 상황을 관찰하는 농부가 있다고 가정합니다. 그는 성장률을보고 몇 주 안에 식물이 얼마나 키가 커질 수 있는지에 대해 숙고하기 시작합니다. Th

소프트 AI의 부상과 오늘날 비즈니스의 의미소프트 AI의 부상과 오늘날 비즈니스의 의미Apr 15, 2025 am 11:36 AM

Soft AI-대략적인 추론, 패턴 인식 및 유연한 의사 결정을 사용하여 구체적이고 좁은 작업을 수행하도록 설계된 AI 시스템으로 정의 된 것은 모호성을 수용하여 인간과 같은 사고를 모방하려고합니다. 그러나 이것이 바이러스의 의미는 무엇입니까?

AI 국경을위한 진화 보안 프레임 워크AI 국경을위한 진화 보안 프레임 워크Apr 15, 2025 am 11:34 AM

클라우드 컴퓨팅이 클라우드 네이티브 보안 도구로의 전환이 필요했기 때문에 AI는 AI의 고유 한 요구를 위해 특별히 설계된 새로운 유형의 보안 솔루션을 요구합니다. 클라우드 컴퓨팅 및 보안 수업의 상승이 배웠습니다 th

3 가지 방법 생성 AI 기업가를 증폭시킵니다 : 평균을 조심하십시오!3 가지 방법 생성 AI 기업가를 증폭시킵니다 : 평균을 조심하십시오!Apr 15, 2025 am 11:33 AM

기업가와 AI 및 생성 AI를 사용하여 비즈니스를 개선합니다. 동시에, 모든 기술과 마찬가지로 생성 AI를 기억하는 것이 중요합니다. 앰프는 앰프입니다. 엄격한 2024 연구 o

Andrew Ng의 모델 임베딩에 대한 새로운 단기 과정Andrew Ng의 모델 임베딩에 대한 새로운 단기 과정Apr 15, 2025 am 11:32 AM

임베딩 모델의 힘 잠금 해제 : Andrew Ng의 새로운 코스에 대한 깊은 다이빙 기계가 완벽한 정확도로 질문을 이해하고 응답하는 미래를 상상해보십시오. 이것은 공상 과학이 아닙니다. AI의 발전 덕분에 R이되었습니다

대형 언어 모델 (LLMS)에서 환각이 불가피합니까?대형 언어 모델 (LLMS)에서 환각이 불가피합니까?Apr 15, 2025 am 11:31 AM

대형 언어 모델 (LLM) 및 환각의 피할 수없는 문제 Chatgpt, Claude 및 Gemini와 같은 AI 모델을 사용했을 것입니다. 이들은 대규모 텍스트 데이터 세트에 대해 교육을받은 강력한 AI 시스템의 대형 언어 모델 (LLM)의 예입니다.

60% 문제 - AI 검색이 트래픽을 배출하는 방법60% 문제 - AI 검색이 트래픽을 배출하는 방법Apr 15, 2025 am 11:28 AM

최근의 연구에 따르면 AI 개요는 산업 및 검색 유형에 따라 유기 트래픽이 15-64% 감소 할 수 있습니다. 이러한 급격한 변화로 인해 마케팅 담당자는 디지털 가시성에 관한 전체 전략을 재고하게합니다. 새로운

AI R & D의 중심에 인간 번성을하는 MIT Media LabAI R & D의 중심에 인간 번성을하는 MIT Media LabApr 15, 2025 am 11:26 AM

Elon University의 Digital Future Center를 상상 한 최근 보고서는 거의 300 명의 글로벌 기술 전문가를 조사했습니다. 결과적인 보고서 인‘2035 년에 인간이되는 것’은 대부분 AI 시스템의 심화가 T에 대한 우려가 있다고 결론지었습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기