elasticsearch - 부분 일치
13030 단어 elasticsearch
elasticsearch - 부분 일치
참고 자료:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/scoring-theory.html
구문 일치
짧은 Quick brown fox와 일치하는 문서로 인정되면 다음과 같은 요구 사항을 충족해야 합니다.
GET /my_index/my_type/_search
{
"query": {
"match_phrase": {
"title": "quick brown fox"
}
}
}
or
"match": {
"title": {
"query": "quick brown fox",
"type": "phrase"
}
}
위치 문제
GET /my_index/my_type/_search
{
"query": {
"match_phrase": {
"title": {
"query": "quick fox",
"slop": 1
}
}
}
}
slop은 단어가 중어와 일치하는 간격과 순서를 결정합니다.
Pos 1 Pos 2 Pos 3
-----------------------------------------------
Doc: quick brown fox
-----------------------------------------------
Query: fox quick
Slop 1: fox|quick ↵// fox quick
Slop 2: quick ↳ fox
Slop 3: quick ↳ fox
다중 값 필드
PUT /my_index/groups/1
{
"names": [ "John Abraham", "Lincoln Smith"]
}
구문 조회
GET /my_index/groups/_search
{
"query": {
"match_phrase": {
"names": "Abraham Lincoln"
}
}
}
포지션은 다음과 같습니다.
그러면 여기에 잘못된 검색 결과가 나타날 것입니다. 이 기록은 명중될 것입니다
해결 방법
"properties": {
"names": {
"type": "string",
"position_increment_gap": 100
}
}
}
이때 포지션
이때 슬롯이 100이어야 적중됩니다.
slop의 점수(가까울수록 좋다)
네가 slop에 큰 값을 주었을 때, 단어가 가까울수록 점수가 높아진다
POST /my_index/my_type/_search
{
"query": {
"match_phrase": {
"title": {
"query": "quick dog",
"slop": 50
}
}
}
}
{
"hits": [
{
"_id": "3",
"_score": 0.75,
"_source": {
"title": "The quick brown fox jumps over the quick dog"
}
},
{
"_id": "2",
"_score": 0.28347334,
"_source": {
"title": "The quick brown fox jumps over the lazy dog"
}
}
]
}
구문 일치의 관련성 범위를 높이다
GET /my_index/my_type/_search
{
"query": {
"bool": {
"must": {
"match": {
"title": {
"query": "quick brown fox",
"minimum_should_match": "30%"
}
}
},
"should": {
"match_phrase": {
"title": {
"query": "quick brown fox",
"slop": 50
}
}
}
}
}
}
단어가 일치하기 때문에 모든 단어가 나타나야 하고 그들의 위치도 관련 요구가 있기 때문에 범위를 높이기 위해bool조작을 통해 실현한다.
분석 조회와 인근 조회의 최적화
이전 장에서 우리는 문서를 결과 목록에서 추가하거나 제외하는 대신 인접 조회를 사용하여 관련도를 조정하는 것에 대해 토론했다.하나의 조회는 수천 수만의 결과와 일치할 수 있지만, 우리 사용자들은 결과의 몇 페이지만 흥미를 느낄 가능성이 높다.
간단한 match 검색은 검색 단어가 포함된 모든 문서를 정렬을 통해 결과 목록 앞에 놓았습니다.사실상, 우리는 이 맨 위 문서들을 다시 정렬해서 단어 조회와 일치하는 문서에 대한 추가 관련도를 업그레이드하고 싶을 뿐이다.
Search API는 재채점을 통해 이 기능을 명확하게 지원합니다.재평가 단계는 값이 더 높은 평가 알고리즘을 지원합니다. 예를 들어 phrase 조회 등은 단지 모든 점수에서 전 K개의 결과를 얻기 위해서입니다.그리고 그것들의 최신 평점에 따라 다시 정렬됩니다.
이 요청은 다음과 같습니다.
GET /my_index/my_type/_search
{
"query": {
//match , TF/IDF 。
"match": {
"title": {
"query": "quick brown fox",
"minimum_should_match": "30%"
}
}
},
"rescore": {
//window_size 。
"window_size": 50,
"query": {
// , 。
"rescore_query": {
"match_phrase": {
"title": {
"query": "quick brown fox",
"slop": 50
}
}
}
}
}
}
관련어
[“sue”, “ate”, “the”, “alligator”] [“sue ate”, “ate the”, “the alligator”] [“sue ate the”, “ate the alligator”]
DELETE /my_index
PUT /my_index
{
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"my_shingle_filter": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 2,
"output_unigrams": false
}
},
"analyzer": {
"my_shingle_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"my_shingle_filter"
]
}
}
}
}
}
다중 필드
PUT /my_index/_mapping/my_type
{
"my_type": {
"properties": {
"title": {
"type": "string",
"fields": {
"shingles": {
"type": "string",
"analyzer": "my_shingle_analyzer"
}
}
}
}
}
}
GET /my_index/my_type/_search
{
"query": {
"bool": {
"must": {
"match": {
"title": "the hungry alligator ate sue"
}
},
"should": {
"match": {
"title.shingles": "the hungry alligator ate sue"
}
}
}
}
}
성능
shingles는 단어 조회보다 유연할 뿐만 아니라 성능도 좋다.shingles 검색은 간단한 match 검색만큼 효율적이며, 매번 검색할 때마다 단어 검색의 대가를 치르지 않습니다.단지 색인 기간에 더 많은 단어가 색인되어야 하기 때문에 약간의 대가를 치르게 될 뿐, 이것은 shingles가 있는 필드가 더 많은 디스크 공간을 차지한다는 것을 의미한다.그러나 대부분의 응용 프로그램은 한 번 쓰고 여러 번 읽기 때문에 색인 기간에 우리의 검색 속도를 최적화하는 것은 의미가 있다.
부분 일치
select * from t1 where t1.a like ‘%tom%’
prefix 접두사 조회
GET /my_index/address/_search
{
"query": {
"prefix": {
"postcode": "W1"
}
}
}
쿼리는 접두사 일치를 지원하기 위해 다음과 같은 작업을 수행합니다.
필드에 있는 단어의 집합이 매우 시간적이면 안심하고 사용할 수 있지만, 신축성이 좋지 않아서, 우리의 집단에 많은 압력을 줄 수 있다.비교적 긴 접두사를 사용하여 이런 영향을 제한하고 방문해야 할 양을 줄일 수 있다.
와일드카드
? 모든 문자 일치, * 0 개 이상의 문자 일치
GET /my_index/address/_search
{
"query": {
"wildcard": {
"postcode": "W?F*HW"
}
}
}
이 정규 표현식 요구어는 반드시 W로 시작해서 0에서 9 사이의 모든 숫자를 따라가서 하나 이상의 다른 문자를 받아야 한다.
GET /my_index/address/_search
{
"query": {
"regexp": {
"postcode": "W[0-9].+"
}
}
}
주의:wildcard와regexp 조회의 작업 방식은prefix 조회와 완전히 같습니다. 성능 문제
이 부분의 일치는 모두 단어 조회이고 모두 단어 항목에 기초한 조회이다.
입력 즉시 조회 (입력 프롬프트 관련 검색)
구문 접두사 일치
{
"match_phrase_prefix" : {
"brand" : {
"query": "walker johnnie bl",
"slop": 10
}
}
}
//explain
"johnnie walker bl*"
매개변수 max_expansions는 접두사와 일치할 수 있는 단어의 수량을 제어합니다. 접두사bl과 일치하는 첫 번째 단어를 먼저 찾은 다음, 그 단어와 일치하는 단어를 순서대로 찾습니다. (알파벳순으로) 더 이상 일치하는 단어가 없거나 max_expansions 때 끝납니다.
사용자가 한 글자를 더 입력할 때마다 이 검색은 다시 한 번 실행되기 때문에 검색은 빠르다. 만약 첫 번째 결과집이 사용자가 원하는 것이 아니라면, 그들은 만족스러운 결과를 찾을 때까지 계속 입력할 것이다.
{
"match_phrase_prefix" : {
"brand" : {
"query": "johnnie walker bl",
"max_expansions": 50
}
}
}
Ngrams - 부분 일치
quick
색인
token
{
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
}
}
{
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
PUT /my_index
{
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
}
PUT /my_index/_mapping/my_type
{
"my_type": {
"properties": {
"name": {
"type": "string",
"analyzer": "autocomplete"
}
}
}
}
GET /my_index/my_type/_search
{
"query": {
"match": {
"name": {
"query": "brown fo",
"analyzer": "standard"
}
}
}
}
복합어의 사용
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"trigrams_filter": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3
}
},
"analyzer": {
"trigrams": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"trigrams_filter"
]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"text": {
"type": "string",
"analyzer": "trigrams"
}
}
}
}
}
GET /my_index/my_type/_search
{
"query": {
"match": {
"text": {
"query": "Gesundheit",
"minimum_should_match": "80%"
}
}
}
}
참고 자료:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/scoring-theory.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.