Elasticsearch는 SearchParseException
정렬 기준에 사용 된 필드를 포함하지 않는 문서가 발견되면 쿼리를 구문 분석 하는 동안 잠시 발생합니다.
SearchParseException : 구문 분석 실패 [정렬 할 [가격]에 대한 매핑이 없음]
price
필드 가 누락 된 문서도 어떻게 성공적으로 검색 할 수 있습니까?
Elasticsearch는 SearchParseException
정렬 기준에 사용 된 필드를 포함하지 않는 문서가 발견되면 쿼리를 구문 분석 하는 동안 잠시 발생합니다.
SearchParseException : 구문 분석 실패 [정렬 할 [가격]에 대한 매핑이 없음]
price
필드 가 누락 된 문서도 어떻게 성공적으로 검색 할 수 있습니까?
답변:
더 많이 파고 나서 아래 주어진 해결책을 찾았습니다. 정렬 절에서 ignore_unmapped
로 명시 적으로 설정해야합니다 true
.
"sort" : [
{ "rating": {"order" : "desc" , "ignore_unmapped" : true} },
{ "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]
자세한 내용은 다음에 대한 Elasticsearch 참조를 살펴보십시오.
"ignore_unmapped" : true
하고 다시 작동하기 시작했지만 이상한 것은 장면 뒤에서 일어난 일입니다! 누가 알아! 어쨌든 지금 작동합니다. +1
모두의 예를 찾는 사람들을 위해
ignore_unmapped
및unmapped_type
참조하십시오 여기에 내 대답을 .
"ignore_unmapped"는 이제 "unmapped_type"대신 사용되지 않습니다. 이것은 # 7039의 일부로 수행되었습니다.
문서에서 : 1.4.0 이전에는 ignore_unmapped 부울 매개 변수가 있었는데, 이는 내보낼 정렬 값을 결정하기에 정보가 충분하지 않았으며 교차 인덱스 검색에서 작동하지 않았습니다. 여전히 지원되지만 사용자는 대신 새로운 unmapped_type으로 마이그레이션하는 것이 좋습니다.
기본적으로 필드와 연결된 매핑이 없으면 검색 요청이 실패합니다. unmapped_type 옵션을 사용하면 매핑이없고 정렬되지 않은 필드를 무시할 수 있습니다. 이 매개 변수의 값은 내보낼 정렬 값을 결정하는 데 사용됩니다. 다음은 사용 방법의 예입니다.
{
"sort" : [
{ "price" : {"unmapped_type" : "long"} },
],
"query" : {
"term" : { "user" : "kimchy" }
}
}
쿼리 된 인덱스 중 가격에 대한 매핑이없는 경우 Elasticsearch는이 인덱스의 모든 문서에이 필드에 대한 값이없는 long 유형의 매핑이있는 것처럼 처리합니다.
분명히 ElasticSearch는 null 값을 정렬하지 않습니다. 나는 그것이 SQL 순서와 마찬가지로 null을 시작 또는 끝으로 취급한다고 가정했지만이 오류도 유발한다고 생각합니다.
따라서이 오류가 표시되면 정렬 속성이 ElasticSearch로 전송 될 때 기본값이 있는지 확인해야 할 수 있습니다.
정렬 열에 기본값이 없기 때문에 Rails + ElasticSearch + Tire에서이 오류가 발생하여 ES에 null로 전송되었습니다.
이 문제 는 null 값이 처리되고 있음을 나타내지 만 내 경험이 아닙니다. 어쨌든 시도할만한 가치가 있습니다.
동일한 문제가 발생했습니다 (sorta; 오류가 발생하지만 일부 결과가 표시됨). 제 경우에는 검색이 루트에서 발행되었고 (인덱스가 지정되지 않음) 검색 / 순서도 마찬가지 였기 때문에 오류가 발생했습니다. Kibana 색인을 찾고 있습니다.
어리석은 오류이지만 아마도 이것은 여기서 끝나는 다른 사람을 도울 것입니다.
Elasticsearch 6.4
간단히 인덱스를 지정하면 Kibana에서 완료됩니다.
전에
GET /_search
{
"query": {
"exists": {
"field": "document_id"
}
},
"sort": [
{
"document_id": { "order": "asc" },
"created_at": { "order": "desc" }
}
]
}
후
GET /document-index/contact/_search (here)
{
"query": {
"exists": {
"field": "document_id"
}
},
"sort": [
{
"document_id": { "order": "asc" },
"created_at": { "order": "desc" }
}
]
}
added_on 이 date 인 아래 코드를 사용하면 어떻게 되나요 !! 속성 텍스트가 분석됩니다. 즉, 저장 될 때 고유 한 단어로 분할되고 필드에있는 하나 이상의 단어에 대한 자유 텍스트 검색이 가능합니다.
따라서 필드와 관련된 "텍스트"및 "키워드"가 있으므로 쿼리에서 집계를 사용해야하는 경우 일반적으로 키워드 인 필드 값이 필요합니다.
BEFORE
"_source":{....}
"query" : {...}
"sort": [
{
"added_on": {
"order": "desc"
}
}
]
AFTER
"_source":{....}
"query" : {...}
"sort": [
{
"added_on.keyword": {
"order": "desc"
}
}
]