elasticsearch 필드의 정확한 값은 대/소문자를 구분하지 않는 쿼리로 어떻게 검색합니까? 예를 들어 값 { "Type": "Płatność kartą"}, 이있는 필드가 있고 쿼리가 값 "płatność kartą"로 검색합니다. 문자열 매개 변수 목록 (예 : "płatność kartą", "płatność gotówką"등)으로 검색 할 수 있어야합니다. 탄력있는 TERMS 쿼리를 시도했지만 민감한 대/소문자 차이가 나타나면 값을 반환하지 않았습니다. 필드 색인은 not_analyzed로 설정됩니다.탄성 검색은 대소 문자를 구분하지 않고 필드의 정확한 값을 검색합니다.
0
A
답변
1
색인을 생성 할 때 not analyzed
을 선택하면 Elastic은 색인 기간에 이러한 용어를 분석하지 않으므로 그대로 저장됩니다. 따라서 쿼리 할 때 쿼리 용어가 저장된 필드와 일치하지 않으므로 아무 결과도 얻지 못합니다.
소문자로 쿼리하고 대문자 결과를 얻으려면 매핑에 analyzer
을 사용해야합니다. 다음은 docs에서 사용할 수있는 옵션입니다.
사용할 수있는 분석기가 없으면 적용 할 필터를 지정하여 사용자 정의 분석기를 정의 할 수 있습니다. 예를 들어, lowercase
필터 만 사용하면 탄성은 RegisteredPaymentType
필드를 소문자로 표시합니다. 그런 다음 쿼리하는 동안 동일한 분석기가 쿼리에 적용되고 예상되는 결과를 얻을 수 있습니다.
나는 분석기를 간단하게 바꿨지 만 지금은 hava 매핑 { "유형": "문자열", "분석기": "단순"}}을 사용하지만 텍스트 "platność w drodze "나는 결과를 얻지 못했습니다. 예를 들어 "platność"와 같이 한 단어 만 검색하면 예상대로 많은 결과를 얻습니다. 내가 뭘 잘못하고있어? – Mateusz
매핑을 변경 한 후 데이터를 다시 인덱싱 했습니까? 그 외에도, 예를 들어 "l"과 "ł"가 같은 문자라고 생각하십니까? 간단한 분석기는 아마도이 차이를 처리하지 못할 것입니다. [정렬 필터] (https://www.elastic.co/guide/en/elasticsearch/guide/current/asciifolding-token-filter.html). – christinabo
간단한 분석기를 사용하는 경우 토크 나이저를 사용합니다 (빈 공간을 분할하여 용어를 작성하므로 "platność", "w", "drodze"라는 나무 용어를 갖게됩니다). . 간단한 필드를 사용하면 match_phrase를 사용할 수 있지만 사용하려면 분석 API에 대해 자세히 알아야합니다. –