Elasticsearch 정확히 일치 쿼리 (퍼지 아님)
Nov 24 2020
문자열 필드에 대해 다음 쿼리가 있습니다.
const query = {
"query": {
"match_phrase": {
name: "ron"
}
},
"from": 0,
"size": 10
};
이것이 제가 데이터베이스에있는 이름입니다.
1. "ron"
2. "ron martin"
3. "ron ron"
4. "ron howard"
이 쿼리의 결과는 매우 모호하며 행 번호 1 만 반환되는 대신 모든 행이 반환됩니다. "같음"대신 "포함"을 수행하는 것과 같습니다.
감사
답변
1 ESCoder Nov 24 2020 at 15:08
귀하의 경우 모든 문서가 포함 ron
되어 있기 때문에 모든 문서가 반환 됩니다.
정확한 필드 만 일치 keyword
하도록하려면 name
필드 에 하위 필드를 추가해야 합니다. 이것은 표준 분석기 대신 키워드 분석기를 사용합니다 ( ".keyword
"뒤 name
필드에주의). 아래 쿼리를 시도해보십시오.
인덱스 매핑 :
{
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
인덱스 데이터 :
{
"name":"ron"
}
{
"name":"ron martin"
}
{
"name":"ron ron"
}
{
"name":"ron howard"
}
{
"name": "john howard"
}
검색어:
{
"query": {
"match_phrase": {
"name.keyword": "ron"
}
},
"from": 0,
"size": 10
}
검색 결과:
"hits": [
{
"_index": "64982377",
"_type": "_doc",
"_id": "1",
"_score": 1.2039728,
"_source": {
"name": "ron"
}
}
]
업데이트 1 :
아래 설명에 따라 요구 사항에 따라 정확히 일치와 유사 일치를 모두 검색하려면 multi_match query를 사용할 수 있습니다 .
검색어:
{
"query": {
"multi_match": {
"query": "howard",
"fields": [
"name",
"name.keyword"
],
"type": "phrase"
}
}
}
검색 결과:
"hits": [
{
"_index": "64982377",
"_type": "_doc",
"_id": "4",
"_score": 0.83740485,
"_source": {
"name": "ron howard"
}
},
{
"_index": "64982377",
"_type": "_doc",
"_id": "5",
"_score": 0.83740485,
"_source": {
"name": "john howard"
}
}
]