2014-09-10 4 views
2

나는 탄성 검색 Java API에서 정규 표현식으로 전체 텍스트 검색을 실행하려고합니다. 내 필터는 다음과 같습니다.ElasticSearch 전문 검색

FilterBuilder qFilter= FilterBuilders.regexpFilter("_all", 
". *"+text+". *"); 

그러나 단 하나의 단어 만 구문과 일치하지 않습니다. 내 말은, 예를 들면 :

같은 soruce의 문자열이있는 경우 : "one two three four five.."하고 내 텍스트 문자열을 다음과 같은 경우 : "two", "our", "thr"... 다음 공장.

그러나 내 realTimeTextIn 문자열이 "two three"이면 전체 텍스트 검색이 작동하지 않습니다. 나는 한 단어 이상을 검색 할 수 없다.

내가 여기에 누락 되었습니까? 에 대한 도움이

FilterBuilder qFilter  = FilterBuilders.regexpFilter("_all", ".*"+q+".*"); 
    SearchResponse response = ClientProvider.instance().getClient().prepareSearch(index) 
         .setTypes(type) 
         .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)        
         .setPostFilter(qFilter)     
         .setFrom(0).setSize(250).setExplain(true)  
         .execute() 
         .actionGet(); 

감사 :

코드의 나머지 부분은 다음과 같이한다.

+0

matchPhrasePrefixQuery 메서드가 있는데 작동하지만 정규 표현식과 함께 사용할 수 없습니다. – rLyLmZ

답변

2

텍스트 문자열이 비어 있거나 null 인 경우이 조인 메서드는 예외를 throw합니다. 이와 같이 regexp 필터를 사용할 수 있습니다.

FilterBuilder qFilter = FilterBuilders.regexpFilter("_all",(".*"+q+".*").replace(" ", ".*")); 
1

흥미로운 질문입니다. 우리가 쿼리에 대해이 작업을 수행 할 수있는 자바 API의 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/phrase-matching.html http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_phrase_search.html

(나는이 테스트) : I 구문 쿼리 및 구문 매칭 같은 것을 발견

SearchResponse response = client.prepareSearch(index) 
      .setTypes(type) 
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
      .setFrom(0).setSize(250).setExplain(true).setQuery(QueryBuilders.matchPhraseQuery(field, "one two")) 
      .execute() 
      .actionGet(); 

미안 해요,하지만 나는하지 않았다 어떤 해결책을 찾으십시오.

당신은 스크립트 필터를 만들 시도 할 수 쿼리 필터라고 또는 무언가 (대신 자바 방식의 필터에 일반 JSON을 삽입) : http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-filter.html

내가 당신에게 작은 도움이되기를 바랍니다.


EDIT : 물론 간단한 해결책이 있습니다.

FilterBuilder qFilter= FilterBuilders.regexpFilter(
"_all",". *"+Joiner.on(".*").join(text.split(" "))+". *"); 
+0

답장을 보내 주셔서 감사합니다. – rLyLmZ