2016-10-29 4 views
0

Elasticsearch는 필드를 지정하지 않고 쿼리 문자열을 사용하여 다중 필드 검색을 고려한 필드 분석기를 고려하지 않은 것처럼 보입니다. 이 인덱스에 대해 구성하거나 쿼리에서 지정할 수 있습니까?쿼리 문자열의 동의어에 대한 다중 필드 검색

여기 예를 들어 보겠습니다.

주어진 파일에서 commit (spring-data-elasticsearch).
SynonymRepositoryTests 테스트가 있으며, QueryBuilders.queryStringQuery("text:british")QueryBuilders.queryStringQuery("british").analyzer("synonym_analyzer") 쿼리가 전달됩니다.

쿼리에 필드와 분석기를 지정하지 않고 QueryBuilders.queryStringQuery("british") 쿼리와 함께 전달할 수 있습니까?

+0

모든 필드에'synonym_analyzer'를 적용 하시겠습니까? – ChintanShah25

+0

아니요, 다른 필드에 대해 서로 다른 분석기를 사용하며 간단한 쿼리 문자열로 검색 가능하게하고 싶습니다. – cubanacan

답변

1

필드 또는 분석기를 지정하지 않고도 쿼리 할 수 ​​있습니다. 기본적으로 query string query은 모든 필드의 조합 인 _all 필드에서 쿼리하고 standard analyzer을 사용합니다. 그래서 QueryBuilders.queryStringQuery("british")가 작동합니다.

인덱스를 만드는 동안 모든 필드의 일부 필드를 exclude 수 있으며 copy_to 기능을 사용하여 모든 필드를 사용자 정의 할 수도 있습니다.

UPDATE 당신은 인덱스를 만드는 동안 _all 필드에 사용자 분석기를 사용하는 것

.

PUT text_index 
{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "edge_filter": { 
      "type": "edge_ngram", 
      "min_gram": 1, 
      "max_gram": 10 
     } 
     }, 
     "analyzer": { 
     "prefix_analyzer": { 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "trim", 
      "edge_filter" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test_type": { 
     "_all": { 
     "enabled": true, 
     "analyzer": "prefix_analyzer" <---- your synonym analyzer 
     }, 
     "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "tag": { 
      "type": "string", 
      "analyzer": "simple" 
     } 
     } 
    } 
    } 
} 

당신은 당신의 synonym_analyzerprefix_analyzer을 대체 할 수있는 다음 그것을 작동합니다.

+0

'british'는 필드 분석기에 정의 된 'english'의 동의어이기 때문에 작동하지 않습니다. – cubanacan

+0

문제가 있습니다. 내 대답을 업데이트했습니다. 작동하지 않는 경우 알려주십시오. – ChintanShah25

+0

도움을 주셔서 감사합니다. 그러나이 구성은 동의어 분석기가 모든 입력란에 적용되지만 분석기가 각 입력란마다 특별히 구성된대로 작동하도록하고 모든 검색어를 하나의 검색어 내에서 검색 할 수있게하려는 것입니다. – cubanacan

관련 문제