Elasticsearch를 구성하여 "JaFNam"을 검색하면 "JavaFileName"에 대해 좋은 점수를 얻을 수 있습니다.CamelCase Search with Elasticsearch
저는 CamelCase pattern
분석기와 edge_ngram
토크 나이저를 결합한 분석기를 만들려고합니다. 나는이이 같은 용어 만들 것이라고 생각 :
J F N Ja Fi Na Jav Fil Nam Java File Name
을하지만 토크 나이는 영향이하지 않는 것 같다 나는이 용어가 계속를 :
Java File Name
무엇 것 같은 올바른 Elasticsearch 구성보기?
예제 코드 :에
curl -XPUT 'http://127.0.0.1:9010/hello?pretty=1' -d'
{
"settings":{
"analysis":{
"analyzer":{
"camel":{
"type":"pattern",
"pattern":"([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)|(?<=[\\p{L}&&[^\\p{Lu}]])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}[\\p{L}&&[^\\p{Lu}]])",
"filters": ["edge_ngram"]
}
}
}
}
}
'
curl -XGET 'http://127.0.0.1:9010/hello/_analyze?pretty=1' -d'
{
"analyzer":"camel",
"text":"JavaFileName"
}'
결과 :
{
"tokens" : [ {
"token" : "java",
"start_offset" : 0,
"end_offset" : 4,
"type" : "word",
"position" : 0
}, {
"token" : "file",
"start_offset" : 4,
"end_offset" : 8,
"type" : "word",
"position" : 1
}, {
"token" : "name",
"start_offset" : 8,
"end_offset" : 12,
"type" : "word",
"position" : 2
} ]
}
'패턴'또는 'edge_ngram'중 하나만 사용할 수 있습니다. 동시에 둘 다 사용할 수는 없습니다. 게다가, 나는 왜 대소 문자가 어떤 차이를 만들어야하는지 잘 모르겠다. 'JaFNam'이나'jafnam'을 검색하는 것과 어떻게 다른가요? – Val
@Val eclipse 및 IntelliJ IDE는 이러한 종류의 "사례 해석"을 사용합니다. 그들은'JaFNam'과'jafnam'을 다르게 해석합니다. 내 검색에 동일한 동작을 사용하고 싶습니다. – slartidan
@Val 원하는 동작을 얻기 위해 'edge_ngram' 토크 나이저 대신'edge_ngram' * 필터 *를 사용할 수 있습니까? – slartidan