ElasticSearch 도메인 간 조회(다중 단어 검색)

3329 단어 ElasticSearch
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

좋은 웹페이지 즐겨찾기