Program Tip

elasticsearch에 "store": "yes"가 필요한 이유는 무엇입니까?

programtip 2020. 11. 24. 19:26
반응형

elasticsearch에 "store": "yes"가 필요한 이유는 무엇입니까?


핵심 유형 링크 에서 속성 설명 (예 : 숫자)에서 말하는 이유를 정말로 이해하지 못합니다 .

  1. store-인덱스에 실제 필드를 저장하려면 yes로 설정하고 저장하지 않으려면 no로 설정합니다. 기본값은 no입니다 (참고, JSON 문서 자체가 저장되며 여기에서 검색 할 수 있음 ).
  2. index-값이 인덱싱되지 않아야하는 경우 no로 설정합니다. 이 경우 store는 yes로 설정되어야합니다. 인덱싱되지 않고 저장되지 않은 경우 에는 관련이 없기 때문입니다.

두 개의 대담한 부분이 모순되는 것 같습니다. "index":"no", "store":"no"내가 여전히 소스에서 가치를 얻을 수 있다면 . 예를 들어 URL이 포함 된 필드가있는 경우 유용 할 수 있습니다. 아니?

저는 약간의 실험을했는데, 하나는 필드가로 설정되고 "store":"yes"다른 하나는로 설정 되었습니다 "store":"no".

두 경우 모두 내 쿼리에서 지정할 수 있습니다.

{"query":{"match_all":{}}, "fields":["my_test_field"]}

그리고 나는 같은 대답을 얻었고 필드를 반환했습니다.

"store"이 설정 "no"되면 특정 필드를 검색 할 수 없지만 전체를 가져 와서 _source클라이언트 측에서 구문 분석해야 한다는 것을 의미 한다고 생각했습니다 .

그래서 설정 "store"하면 어떤 이점이 "yes"있습니까? 필드에서 "_source"필드를 명시 적으로 제외하는 경우에만 관련이 있습니까?


"store"가 "no"로 설정되면 특정 필드를 검색 할 수 없지만 전체 _source를 가져 와서 클라이언트 측에서 구문 분석해야한다는 것을 의미한다고 생각했습니다.

필드가 저장되지 않고 (기본값) _source필드가 활성화 되었을 때 (기본값도) elasticsearch가 정확히 수행하는 작업 입니다.

일반적으로 필드를 검색하거나 검색하기를 원하기 때문에 elasticsearch에 필드를 보냅니다. 그러나 필드를 명시 적으로 저장하지 않고 소스를 비활성화하지 않은 경우에도 _source. 이는 어떤 경우에는 인덱싱되거나 저장되지 않은 필드가있는 것이 실제로 합리적 일 수 있음을 의미합니다.

필드를 저장하면 기본 lucene에서 수행됩니다. Lucene은 빠른 전체 텍스트 검색을 허용하고 주어진 텍스트 쿼리에 문서 ID를 제공하는 역 인덱스입니다. 역 인덱스 너머 Lucene에는 문서 ID가 주어지면 검색하기 위해 필드 값을 저장할 수있는 일종의 저장소가 있습니다. 일반적으로 검색 결과로 반환하려는 필드를 lucene에 저장합니다. Elasticsearch는 사용자가 보내는 모든 문서를 기본적으로 항상 저장하므로 반환하려는 모든 필드를 저장할 필요가 없으므로 항상 보낸 모든 문서를 검색 결과로 반환 할 수 있습니다.

단지 몇 가지 경우에 필드를 lucene에 명시 적으로 저장하는 것이 유용 할 수 있습니다 : _source필드가 비활성화 된 경우 또는 구문 분석이 elasticsearch에 의해 자동으로 수행 되더라도 구문 분석을 피하려는 경우. lucene에서 많은 저장된 필드를 검색하려면 필드 당 하나의 디스크 _source검색이 필요할 수 있지만 필요한 필드를 검색하기 위해 lucene 에서만 검색 하고 구문 분석하는 것은 단일 디스크 검색이며 대부분의 경우 더 빠릅니다.


기본적으로 elasticsearch에서 _source(인덱싱 된 문서)가 저장됩니다. 즉, 검색 할 때 실제 문서 소스를 다시 가져올 수 있습니다. 또한 elasticsearch는 명시 적으로 요청 하면 자동으로에서 추출 fields / objects하여 _source반환합니다 (강조 표시와 같은 다른 구성 요소에서도 사용할 수 있음).

특정 필드도 저장되도록 지정할 수 있습니다. 이는 해당 필드의 데이터 가 자체적 으로 저장됨을 의미합니다 . 즉, field1(저장된) 을 요청하면 elasticsearch가 저장된 것을 식별 _source하고 _source가 활성화되어 있다고 가정 하는 대신 인덱스에서로드합니다 .

특정 필드 저장을 언제 활성화 하시겠습니까? 대부분의 경우 그렇지 않습니다. _source 가져 오기는 빠르고 추출도 빠릅니다. 을 (를) 저장 _source하는 비용이나 파싱 비용 _source이 높은 매우 큰 문서가있는 경우 대신 저장할 일부 필드를 명시 적으로 매핑 할 수 있습니다.

저장된 각 필드를 검색하는 데 비용이 발생합니다. 그래서 당신은 적당한 크기와 열 개 필드가있는 JSON을 가지고 있고, 저장된 예를 들어, 당신이 그들 모두를지도하고, 그들 모두 각 하나를 (더 많은 디스크가 추구) 로딩이 방법을 물어 그냥로드에 비해 _source( 하나의 필드이며 압축되었을 수 있음).

소스 링크

참고 URL : https://stackoverflow.com/questions/17103047/why-do-i-need-storeyes-in-elasticsearch

반응형