ElasticSearch 도메인 간 조회(다중 단어 검색)
3329 단어 ElasticSearch
일반적인 다중 필드 조회는 boolean으로 직접 조회할 수 있습니다. (boolean 조회라면 n개의 조회 조건이 있습니다. 최종적으로 score=score*1/n) 이제 다른 흔히 볼 수 있는 모델을 보겠습니다.
요구하다여러 필드로 분산됩니다.다음과 같습니다.
{
"title": " ",
"content": " ",
"id": "9104240"
}
일치 관계가 AND 관계라고 가정합니다.검색 키워드를 베이징 상하이로 설정합니다.북경, 상해 두 단어로 나뉜다.제목에는 상하이, 콘텐츠에는 베이징이 포함되어 있다.키워드는 각각 두 도메인에 명중합니다.이 글을 검색하는 방법
기어
1:_all 및 맵핑 설정copy_to
여러 필드를 하나의 큰 필드로 합치다.메타데이터에서:_all 필드에서 특수한_all 필드는 다른 모든 필드의 값을 큰 문자열로 인덱스합니다.모든 필드의 값을 하나의 필드로
색인을 하는 것은 결코 매우 유연하지 않다.사용자 정의_가 있는 경우all 필드는 다른 사용자 정의_all 필드는 색인 주소로 사용하면 더욱 좋습니다.
ElasticSearch 필드 매핑을 통한 copy_to 매개 변수는 우리에게 이 기능을 제공했다.
현재 titile과 콘텐츠 필드의 값이 full_로 복사됩니다name 필드에 있습니다.
이 맵이 있으면 우리는 영역을 뛰어넘을 수 있다,full_name은 타이틀과 콘텐츠에서 값을 복사합니다.그리고 full_에 따라name 자체의 필드 type, 단어를 구분합니다.
2: multi_ 사용match 유형은cross_fields 조회
elasticsearch의 multi_match 조회는 match와 마찬가지로 하나의 필드가 아니라fields 파라미터를 통해 여러 필드를 조회할 수 있습니다.물론 match 조회에서 사용할 수 있는 모든 매개 변수도 마찬가지입니다
multi_match 쿼리에서 사용됩니다.
multi_match는 3가지 쿼리 유형을 지원합니다.best_fields、most_fields、cross_fields.사용 유형은cross_fields의 multi_match 쿼리.cross_fields 유형은 단어 중심(Term-
centric)의 방법, 이런 방법과 best_fields 및 most_fields가 사용하는 필드 중심(Field-centric) 방법은 큰 차이가 있다.그것은 모든 필드를 하나의 큰 필드로 보고 모든 필드를 검색한다
단어 하나하나를 찾다.
operator:operator는 and로 설정하여 모든 단어가 나타나야 함을 나타냅니다.
minimum_should_match: 텍스트 일치도를 표시하고 검색 정밀도를 제어하며 아래로 정렬합니다.
1: 우리는 이 단어의 분사 어휘가 서로 다른 필드에 분배되기를 희망할 것이다. 그러면cross_fields
{
"query": {
"multi_match": {
"query": " ",
"type": "cross_fields",
"fields": [
"title",
"content"
]
}
}
}
java 구현:
builder.should(QueryBuilders.multiMatchQuery(keyword, "title.ik^1.5", "storeAddress.ik","plazaName.ik","countyName.ik").type(Type.CROSS_FIELDS).minimumShouldMatch("67%"));
2: 우리는 완전히 일치하는 문서가 비교적 높은 평점을 얻기를 원하며 best_를 사용해야 한다fields
기본적으로 이 질의는
best_fields 형식이 실행됩니다. 필드마다 생성됩니다.
match 쿼리, 그리고 이 쿼리를 포함합니다
dis_max 조회 중입니다.아래의
dis_max 쿼리:
{
"query": {
"multi_match": {
"query": " ",
"type": "best_fields",
"fields": [
"title",
"content"
],
"tie_breaker": 0.3
}
}
}
'베이징 상하이'에 완전히 일치하는 문서의 평점이 비교적 앞선다는 뜻이다. 만약에 보마의 문서 평점만 일치하면 0.3의 계수를 곱한다
3: 많은 필드가 일치하는 문서의 평점이 높을수록 most_fields
{
"query": {
"multi_match": {
"query": " ",
"type": "most_fields",
"fields": [
"title",
"content"
]
}
}
}
most_ 사용fields 방법은 실체 조회를 실행하는 데 뚜렷하지 않은 문제가 있습니다. 첫째, 모든 필드를 뛰어넘는 가장 일치하는 단어를 찾는 것이 아니라 임의의 단어를 찾는 데 사용됩니다.
2: Operator 또는 minimum을 사용할 수 없습니다_should_match 매개 변수는 낮은 관련도 결과가 가져오는 긴 꼬리 효과를 감소시킨다.
셋째, 각 필드의 단어 빈도가 다르기 때문에 서로 간섭하여 최종적으로 비교적 나쁜 정렬 결과를 얻을 수 있다.
참조:https://www.elastic.co/guide/en/elasticsearch/guide/current/_single_query_string.html#know-your-data
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회부록: 1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다. 예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.