우리는 현재 2 개의 색인을 가진 2 노드 탄성 검색 클러스터를 실행 중입니다.이 광고는 (750k 문서와 1110 만 문서) 훌륭하게 수행됩니다.탄성 검색 용어 필터 천천히
이제 3540 만 개의 문서가 포함 된 새로운 색인을 추가하려고하는데 검색 성능이 느립니다. 용어 필터를 반환하는 데 약 2 초가 걸립니다.
매핑 :
tire do
mapping _routing: { required: true, path: :order_id } do
indexes :id, type: 'string', index: :not_analyzed
indexes :order_id, type: 'string', index: :not_analyzed
[:first_name, :last_name, :company_name, :title, :email, :city, :state_region_province, :postal_code].each do |attribute|
indexes attribute, type: 'string', analyzer: 'keyword'
end
indexes :metadata, type: 'string'
indexes :clicks, type: 'integer', index: :not_analyzed, include_in_all: false
indexes :view_count, type: 'integer', index: :not_analyzed, include_in_all: false
indexes :sender, type: 'boolean', index: :not_analyzed, include_in_all: false
indexes :bounced, type: 'boolean', index: :not_analyzed, include_in_all: false
indexes :unsubscribed, type: 'boolean', index: :not_analyzed, include_in_all: false
end
end
검색 중 :
Model.tire.search(load: true, page: page, per_page: per_page, routing: order_id) do |search|
search.query do
match :metadata, query, type: 'phrase_prefix', max_expansions: 10
end if query.present?
search.filter :term, order_id: order_id
search.filter :term, sender: false
end
난 그냥 필터링하는 ORDER_ID을 지정하는 것입니다하고있어 검색; 결과를 반환하는 데 약 2 초가 걸립니다. 어떻게 속도를 올리나요?
편집 : 이제 user_id의 색인을 생성하고이를 라우팅 경로로 사용합니다. 종단 배치를 테스트하기 위해 30 개 파편으로 새 인덱스를 만들었습니다.
편집 2 : (30)와 파편은, 인덱스가 더 성능이 좋은하지만 여전히 첫 번째 쿼리에 대한 데이터를 반환하는 두 번째 수행합니다. 나는 이것을 더 빠르게하거나 어떻게 잘못하고 있는지를 확신 할 수 없다.
나는 필터가 특별히 그것을 언급하기 때문에 'not_analyzed'했어 : http://www.elasticsearch.org/guide/reference/query-dsl/term-filter.html – ryansch
솔직히 수치 같은 것 id not_analyzed와 keyword의 차이점을 잘 모르겠습니다. 키워드 분석기는 전체 입력을 단일 토큰으로 뱉지 만,이 경우 숫자 ID는 분석되지 않을 때 이미 단일 토큰입니다. – ryansch
단일 토큰에 대한 좋은 지적. –