2016-10-14 3 views
0

매핑 및 설정을 구성하여 새 색인을 설정하려고했습니다.탄성 검색 매핑 및 설정 정의

POST /test/text 
{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "greek_stop": { 
      "type":  "stop", 
      "stopwords": "_greek_" 
     }, 
     "greek_lowercase": { 
      "type":  "lowercase", 
      "language": "greek" 
     }, 
     "greek_stemmer": { 
      "type":  "stemmer", 
      "language": "greek" 
     } 
     }, 
     "analyzer": { 
     "greek": { 
      "tokenizer": "standard", 
      "filter": [ 
      "greek_lowercase", 
      "greek_stop", 
      "greek_stemmer" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "article": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
      "greek": { 
       "type": "string", 
       "analyser": "greek" 
       } 
       } 
     }, 
     "content": { 
      "type": "string", 
      "fields": { 
      "greek": { 
       "type": "string", 
       "analyser": "greek" 
       } 
       } 
     }, 
     "indexed_date": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
     } 
     } 
    } 
    } 
} 

나는 내가 _id와 ES가 I가있는 대신에 PUT을 사용하여이 변수에 임의의 값을 제공하는 방법에 대해 많은 관심이 없었어요으로 POST를 사용 : 여기

내가 사용하는 코드입니다 그 값을 지정하십시오. 제목과 내용에 대해 두 개의 필드를 만든 이유는 사용자가 입력 한 단어가 정확하게 발견되면 더 높은 가중치를 부여 할 수 있도록 원본 버전의 텍스트와 '줄기 제거 단어'버전을 갖고 싶어하기 때문입니다.

GET /test/text/_search 
{ 
    "query":{ 
     "multi_match":{ 
       "query":"όμορφος", 
       "type":"most_fields", 
       "fields":["content","content.greek","title","title.greek"]}}} 

그리고 :

PUT /test/text 
{ 
    "title": " ", 
    "content": " ", 
    "date": " " 
} 

나는이 같은 검색 쿼리를 수행 시도 : 그것은 예를 들어, 데이터와 인덱스를 채우는 후

(대신 단어 만 막아야 버전을 저장) 그런 다음 쿼리를 "όμορφη"로 변경하여이 단어들 hav e와 같은 줄기가 붙은 버전은 "όμορφ"이며, 결과적으로 ES의 그리스어 해석기로 인해 나는 같은 항목을 가져야한다.

왜 그런가? 내 문서의 색인을 생성하는 동안 더 많은 작업을 수행해야합니까? 문서를 읽은 후 텍스트의 색인을 생성 할 때 매핑을 정의한 후 자동으로 색인이 생성되고 쿼리가 매번 적절한 분석기를 사용하여 분석 될 것이라는 인상 아래에있었습니다.

내 쿼리가 동일한 결과를 반환하지 않는 이유는 무엇입니까? 어떤 아이디어?

미리 감사드립니다.

답변

0

색인을 작성하려면 PUT test이 아닌 POST /test/text으로 전화해야합니다. 후자는 test이라는 새 인덱스에 text 유형의 새 문서를 만들지 만 기본 설정과 매핑을 사용합니다.

그래서 첫째 :

PUT /test 
{ 
    "settings": { 
    ... 
    }, 
    "mappings": { 
    ... 
    } 
} 

는 그런 다음

POST /test/article 
{ 
    "title": " ", 
    "content": " ", 
    "date": " " 
} 

만 검색 쿼리

작동합니다 ( text를, 당신의 매핑 유형이 article라는 것을 유의하지 않음) 새로운 문서를 만들 수 있습니다
+0

POST로 색인을 만들려고 할 때 : { "_index": "test", " _type ":"텍스트 ", "_id ":"AVfDJVLHvgDv319PJqTd " "_version ": 1, "_shards ": { "총 ": 2, "성공 ": 1, 는" "실패 : 0 }, 은 "창조"사실 } 를 반면에 PUT과 내가 얻을 : 없음 핸들러가 URI [/ 테스트/기사] 및 방법 [PUT] 어떤 생각을 왜을 찾을 수 없습니다? /test/text 대신/test를 만들면 다음과 같이 표시됩니다. "type": "mapper_parsing_exception", "이유": "[fields]에 대한 매핑 정의에 지원되지 않는 매개 변수가 있습니다 : [analyzer : 그리스어]" – Swan87

+0

그리스 분석기를 지정하지 않으 난 그냥 수행 할 수 "매핑": { "my_type_name": { "속성": { "제목": { "유형": "텍스트", "분석기" : "영어" } } }} 이 전체 정의를 포함하는 대신? – Swan87

+0

색인을 생성 할 때 반드시 'PUT'과 색인 이름 만 가져야합니다. 문서를 만들 때'POST index/type' 또는'PUT index/type/id'를 가질 수 있습니다. 색인을 삭제하고 위의 제 제안으로 다시 시작하십시오. 내가 돌아 왔을 것을 시도 – Val