나는 elasticsearch 쿼리에 와일드 카드를 사용하지 말아야한다는 것을 최근에 발견했습니다. 대신, 나는 ngram을 사용해야한다고 들었다. 내 실험에서, 이것은 정말로 잘 돌아갔다. 내가하고 싶은 것은 모든 매핑 된 필드 (또는 특정 patern에 맞는 매핑 된 속성)에 대해 ngrams를 사용하도록 Elasticsearch에 알릴 수 있습니다. 예를 들어 :미리 정의 된 스키마없이 와일드 카드 대신 ngram 사용
이제CURL -XPUT 'http://localhost:9200/test-ngram-7/' -d '{
"mappings": {
"person": {
"properties": {
"name": {
"type": "string",
"analyzer": "partial"
}
}
}
},
"settings": {
"analysis": {
"filter": {
"lb_ngram": {
"max_gram": 10,
"min_gram": 1,
"type": "nGram"
}
},
"analyzer": {
"partial": {
"filter": [
"standard",
"lowercase",
"asciifolding",
"lb_ngram"
],
"type": "custom",
"tokenizer": "standard"
}
}
}
}
}'
,이 매핑을 추가 할 때 :
CURL -XPUT 'http://localhost:9200/test-ngram-7/person/1' -d '{
"name" : "Cobb",
"age" : 31
}'
내가 쉽게 "OBB"쿼리 및 부분적인 결과를 얻을 수 있습니다. 내 앱에서는 사람들이 매핑 할 분야를 미리 알지 못합니다. 나는이 클라이언트 측에서하고 문서를 게시하기 전에 내 매핑을 선언 분명히 단락 수,하지만 난 이런 식으로 뭔가 할 수 있다면 정말 멋진 것 : 나는 "기본을 사용하고
CURL -XPUT 'http://localhost:9200/test-ngram-7/' -d '{
"mappings": {
"person": {
"properties": {
"_default_": {
"type": "string",
"analyzer": "partial"
}
}
}
},
"settings": {
"analysis": {
"filter": {
"lb_ngram": {
"max_gram": 10,
"min_gram": 1,
"type": "nGram"
}
},
"analyzer": {
"partial": {
"filter": [
"standard",
"lowercase",
"asciifolding",
"lb_ngram"
],
"type": "custom",
"tokenizer": "standard"
}
}
}
}
}'
주 ". "name. *"처럼 할 수 있다면 멋질 것입니다. 이름으로 시작하는 모든 속성은이 방법으로 필터링됩니다. 나는 elasticsearch가 디폴트 인과 와일드 카드를 지원한다는 것을 알고 있습니다. *, 그래서 나는 그것을 잘못하고 있기를 바라고 있습니다.
간략히 말하자면 매핑을 만들 때 이 자동으로으로 생성되면 ngram 필터를 통해 새 속성을 실행하고 싶습니다.
감사합니다. 패턴에 대한 유용한 정보. – eric