최근에 ElasticSearch를 사용하기 시작했으며 단어의 일부를 검색 할 수 없습니다.
예 : ElasticSearch에서 색인을 생성 한 couchdb의 세 가지 문서가 있습니다.
{
"_id" : "1",
"name" : "John Doeman",
"function" : "Janitor"
}
{
"_id" : "2",
"name" : "Jane Doewoman",
"function" : "Teacher"
}
{
"_id" : "3",
"name" : "Jimmy Jackal",
"function" : "Student"
}
이제 "Doe"가 포함 된 모든 문서를 검색하고 싶습니다.
curl http://localhost:9200/my_idx/my_type/_search?q=Doe
어떤 히트도 반환하지 않습니다. 하지만 내가 검색하면
curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
하나의 문서 (John Doeman)를 반환합니다.
인덱스의 속성으로 다른 분석기와 다른 필터를 설정하려고했습니다. 또한 전체 쿼리를 사용하여 시도했습니다 (예 :
{
"query": {
"term": {
"name": "Doe"
}
}
}
) 그러나 아무것도 작동하지 않는 것 같습니다.
"Doe"를 검색 할 때 ElasticSearch에서 John Doeman과 Jane Doewoman를 모두 찾도록하려면 어떻게해야합니까?
최신 정보
Igor가 제안한 것처럼 nGram 토크 나이저와 필터를 다음과 같이 사용하려고했습니다.
{
"index": {
"index": "my_idx",
"type": "my_type",
"bulk_size": "100",
"bulk_timeout": "10ms",
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer",
"filter": [
"my_ngram_filter"
]
}
},
"filter": {
"my_ngram_filter": {
"type": "nGram",
"min_gram": 1,
"max_gram": 1
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": 1,
"max_gram": 1
}
}
}
}
}
내가 지금 가지고있는 문제는 각각의 모든 쿼리가 모든 문서를 반환한다는 것입니다. 어떤 포인터? nGram 사용에 대한 ElasticSearch 설명서는 훌륭하지 않습니다 ...