2016-07-11 3 views
1

내 응용 프로그램에서 Elasticsearch를 사용하여 테이블의 어느 곳에서나 일치하는 단어를 검색합니다. 탄성 검색 레일에서 검색어 문자열 4

내가 내 결과를 가져 오는 데 사용한 쿼리 문자열입니다

search({ query: { prefix: { _all: keywords }}, sort: [ { start_date: 'asc', start_time: 'asc' } ] }) 

선택한 레코드가 다음으로, 응용 프로그램에 지정된 날짜 범위 (들)에 맞게 날짜로 조회되고 있었다 검색어 :

where("status_id= ? and active=? and (((start_date >= ?) and (start_date <= ?)) 
or ((start_date <= ?) and (? <= end_date)))",2,true,range_start_date, 
range_end_date,range_start_date,range_start_date) 

하지만 결과를 가져 오는 좋은 방법은 아닙니다. 이제는 elasticsearch 인덱스에서 필요한 데이터를 가져 오도록 수정하고 싶습니다.

긴 검색 후 내 요구 사항에 맞게 "query_string"및 "simple_query_string"이 발견되었습니다. 하지만 지금까지 필요한 결과를 얻지 못했습니다.

어떻게 탄성 검색 결과와 함께 쿼리를 추가하여 필요한 레코드를 얻을 수 있습니까? 누군가 도와 드릴 수 있습니까?

미리 감사드립니다.

답변

1

마지막으로, 직접 질문에 대한 답변을 찾을 수있었습니다. 나는 "필터"키워드로 날짜에 따라 검색된 내용을 필터링 할 수있었습니다.

나는 같이 쿼리를 수정 :

search_query = { 
query: { 
    prefix: { 
    _all: keywords 
    } 
}, 
filter: { 
    query: { 
    query_string: { 
     query: "status_id:2 AND active:true AND 
     ((start_date:>=#{range_start_date} AND start_date:<=#{range_end_date}) (start_date:<=#{range_start_date} AND end_date:>=#{range_start_date}))" 
    } 
    } 
}, 
sort: [ { start_date: 'asc', start_time: 'asc' } ] } 

그리고 마지막으로 결과를 가져 : 어쨌든 나는이 코드를 수정할 수있는 경우, 제안하십시오

@result = self.search(search_query) 

합니다. 고맙습니다.