2016-09-23 5 views
0

특수 문자를 공백으로 대체하고 대문자로 변환하는 분석기를 만들려고합니다. 그 다음엔 소문자로 검색하고 싶다면 제대로 작동해야합니다.elasticsearch 매핑 분석기 - 결과가 나타나지 않습니다.

매핑 분석기 : 그것은 공백과 특수 문자를 대체하여 제대로 말을 토큰 화되어

[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XPUT 'http://localhost:9200/aida' -d '{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "char_filter": [ 
      "my_char_filter" 
      ], 
      "filter": [ 
      "uppercase" 
      ] 
     } 
     }, 
     "char_filter": { 
     "my_char_filter": { 
      "type": "pattern_replace", 
      "pattern": "(\\d+)-(?=\\d)", 
      "replacement": "$1 " 
     } 
     } 
    } 
    } 
} 
' 
{"acknowledged":true} 


[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XPOST 'http://localhost:9200/aida/_analyze?pretty' -d '{ 
"analyzer":"my_analyzer", 
"text":"My name is Soun*arya?jwnne&yuuk" 
}' 

. 이제 텍스트에서 단어를 검색하면 검색 결과가 표시되지 않습니다.

[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XGET 'http://localhost:9200/aida/_search' -d '{ 
"query":{ 
"match":{ 
"text":"My" 
} 
} 
}' 

위의 GET 쿼리 결과가 표시되지 않습니다. 같은 결과 받기 :

[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XGET 'http://localhost:9200/aida/_search' -d '{ 
"query":{ 
"match":{ 
"text":"my" 
} 
} 
}' 
{"took":5,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}} 

아무도 도와 줄 수 있습니까? 고맙습니다!

+0

색인을 생성했지만 색인을 생성 했습니까? '_analyze'에 대한 호출은 아무 것도 색인화하지 않고 단지 텍스트 분석 방법을 보여줍니다. 나는 당신의 [다른 질문]에서와 같은 문제라고 생각합니다. (http://stackoverflow.com/questions/39643533/custom-analyzer-which-breaks-the-tokens-on-special-characters-and-lowercase-uppe) – Val

+0

그래, 그 같은 문제. 이 문제를 어떻게 해결할 수 있는지 말해 주 시겠어요 –

답변

1

색인을 만든 후에는 색인이 생성 된 것처럼 보이지 않습니다. _analyze로 전화하면 아무 것도 색인으로 남지 않지만 단순히 ES로 보내는 콘텐츠를 분석하는 방법을 보여줍니다. 그런 다음

curl -XPUT 'http://localhost:9200/aida' -d '{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "char_filter": [ 
      "my_char_filter" 
      ], 
      "filter": [ 
      "uppercase" 
      ] 
     } 
     }, 
     "char_filter": { 
     "my_char_filter": { 
      "type": "pattern_replace", 
      "pattern": "(\\d+)-(?=\\d)", 
      "replacement": "$1 " 
     } 
     } 
    } 
    }, 
    "mappings": {      <--- add a mapping type... 
    "doc": { 
     "properties": { 
     "text": {      <--- ...with a field... 
      "type": "string", 
      "analyzer": "my_analyzer" <--- ...using your analyzer 
     } 
     } 
    } 
    } 
}' 

할 수 있습니다 인덱스 새로운 실제 문서 :

curl -XPOST 'http://localhost:9200/aida/doc' -d '{ 
    "text": "My name is Soun*arya?jwnne&yuuk" 
}' 

먼저, 당신은 당신이 정의한 분석기를 사용하는 매핑을 지정하여 인덱스를 생성해야 마지막으로 다음을 검색 할 수 있습니다.

curl -XGET 'http://localhost:9200/aida/_search' -d '{ 
    "query":{ 
    "match":{ 
     "text":"My" 
    } 
    } 
}' 
+0

굉장합니다. 이제 작동합니다. 그러나 작은 질문이 있으십시오 - 그것은 완벽하게 색인을 생성하고 검색은 나뿐만 아니라 결과를 검색하고 있습니다. 예를 들어 텍스트 필드에서 이름을 검색하면 특수 문자로만 결과를 얻을 수 있습니다. 두 번째 단계에서 수행 된 결과를 검색 할 수 없습니다. (문서 인덱싱 후 결과) –

+0

원본 문서가 ES에 의해 수정되지 않으며 텍스트가 분석되고 토큰 화되고 인덱싱되지만 반환 된 문서는 항상 색인을 생성 한 콘텐츠와 정확히 동일한 콘텐츠를 포함합니다. – Val

+0

신난다, 기쁜 그것이 도왔다! – Val