elasticsearch에서 배열의 인덱스를 기준으로 쿼리/필터링을 수행하려면 어떻게합니까?배열 인덱스의 탄성 검색 쿼리
나는 문서를 같이 가지고있다 -
나는 LIN [0]는 "UP"인 경우 검색 할PUT /edi832/record/1
{
"LIN": [ "UP", "123456789" ]
}
가와 LIN [1]가 존재한다.
감사합니다.
elasticsearch에서 배열의 인덱스를 기준으로 쿼리/필터링을 수행하려면 어떻게합니까?배열 인덱스의 탄성 검색 쿼리
나는 문서를 같이 가지고있다 -
나는 LIN [0]는 "UP"인 경우 검색 할PUT /edi832/record/1
{
"LIN": [ "UP", "123456789" ]
}
가와 LIN [1]가 존재한다.
감사합니다.
이것은 해킹처럼 보일 수 있지만 확실히 작동합니다. 먼저 멀티 필드와 함께 토큰 카운트 유형을 적용하여 토큰 수를 필드로 캡처합니다. 그래서 매핑은 다음과 같을 것입니다 -
{
"record" : {
"properties" : {
"LIN" : {
"type" : "string",
"fields" : {
"word_count": {
"type" : "token_count",
"store" : "yes",
"analyzer" : "standard"
}
}
}
}
}
}
LINK - 두 번째 필드가 존재하는 경우이 필드의 값이 2 보다 더 많거나 같은 경우 그래서
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#token_count 검사로, 그 쉬운을 확인 다음으로 토큰 필터를 사용하여 "up"토큰이 0 위치에 있는지 확인할 수 있습니다.스크립트 필터를 사용하여이를 확인할 수 있습니다. 은 따라서 다음과 같은 쿼리가 작동합니다 -
{
"query": {
"filtered": {
"query": {
"range": {
"LIN.word_count": {
"gte": 2
}
}
},
"filter": {
"script": {
"script": "for(pos : _index['LIN'].get('up',_POSITIONS)){ if(pos.position == 0) { return true}};return false;"
}
}
}
}
}
스크립트 필터 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-script-filter.html
이 좋아 보인다. 그러나 게시물 작성자가 색인의 매핑을 변경하는 데 아무런 문제가 없다면 접근 방식에 bool 쿼리를 더한 것이 더 효율적이라고 말할 수 있습니다. –
추천 한 접근 방식에서 '위로'토큰이 먼저 오는 것을 어떻게 확인할 수 있습니까? –
고마워요 @Vineeth Mohan. 나는이 대답을 받아 들였다. 이것에 대한 충분한 조언을 제공합니다. – Thanigs