2014-11-26 2 views
1

nodejs에 elasticsearch를 사용하여 속성 값을 기반으로 문서를 얻을이 technology.I가 nodejs.My 데이터를 사용하여 elasticsearch의 인덱스 유형의 속성 값을 검색하는 방법을 알고 didnot에 내가 새로운 오전 것은내가 Elasticsearch을 사용하고

{ 
      "line_num": 1, 
      "action1": "ORIGINAL", 
      "process_code1": "PENDING", 
      "isPR": "Y", 
      "req_header_reference_num": "PC5298", 
      "req_line_reference_num": "PC5298", 
      "pr_line_no": "1", 
      "pr_id": "ffd3f7cc6", 
      "pr_po_flag": "N", 
      "pr_item_id": "720541" 
} 
입니다

이 데이터에서 속성 값을 기준으로 검색하고 싶습니다. 예 내가주는 경우에 "ORIGINAL", 당신의 목표는 값 "ORIGINAL"를 포함하는 모든 필드와 일치하는 경우, 사전

+0

당신이 탄성 검색에 대한 NPM 모듈을 사용하고 있습니까? – Sohan

답변

3

이 문제를 감사를 해결하는 방법을 elasticsearch 에서 특정 문서를 얻기 위해이를 바탕 "multi match" query을 사용해야합니다. 당신의 예에서

이 평균 :

POST /index/type/_search 
{ 
    "query": { 
     "multi_match": { 
     "query": "ORIGINAL", 
     "fields": [ "*" ], 
     "lenient": true 
     } 
    } 
} 

그러나 질의의 방법은 "일치"쿼리 단일 필드와 일치하는 것이 좋습니다, 매우 효율적 아니라는 것을 알고 :

POST /index/type/_search 
{ 
    "query": { 
     "match": { 
      "action1" : "ORIGINAL" 
     } 
    } 
} 

node.js에서 the official elastic library을 사용하여 elasticsearch를보다 쉽게 ​​쿼리 할 수 ​​있습니다.

예를 들어, 귀하의 경우, 당신은이 라이브러리와 함께 이러한 종류의 코드를 작성합니다 :

var elasticsearch = require('elasticsearch'); 
var client = new elasticsearch.Client({ 
    host: 'localhost:9200', 
    log: 'trace' 
}); 
client.search({ 
    index: 'index', 
    type: 'type', 
    body: { 
     query: { 
      match: { 
       action1: 'ORIGINAL' 
      } 
     } 
    } 
}).then(function (resp) { 
    var hits = resp.hits.hits; 
    console.log(hits); 
}, function (err) { 
    console.trace(err.message); 
}); 
+0

내 시스템에서이 코드를 실행했지만 오류가 발생했습니다. {error : 'SearchPhaseExecutionException [phase [query_fetch]를 실행하지 못했습니다. 모든 샤드가 실패했습니다. shardFailures {[pzDrmFNHRdaQ5EtxkpKGLA] [구입 _ 순서 1] [0] : SearchParseException [[구매] _ 순서 1] [0] : 크기 [-1] : 파싱 실패 [소스를 파싱하지 못했습니다 [{ "query": { "multi_match" : { "query": "satishkumar", "fields": [ "*"]}}}]]]; 중첩 : NumberFormatException [입력 문자열의 경우 : "satishkumar"]; }] ', 상태 : 400} – RamRajVasavi

+0

"action1"필드에 문서가 포함 된 다음 쿼리 작성 방법 – RamRajVasavi

+0

인덱스에 호환되지 않는 유형 필드 (예 : 정수)가 있으면이 오류가 발생합니다. 이를 방지하기 위해''lenient : true''를 쿼리에 추가합니다. 이 매개 변수를 사용하여 내 대답을 편집 할 것입니다. 반면에 "action1"필드에서만 일치하는 것을 찾고 있다면 두 번째 쿼리가 사용자의 요구에 더 잘 맞습니다. – SylvainB