Elasticsearchを設定したいので、 "JaFNam"を検索すると "JavaFileName"のスコアが高くなります。CamelCase Search with Elasticsearch
キャメルケース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
} ]
}
「pattern」または「edge_ngram」のどちらか一方のみを使用できますが、同時に両方を使用することはできません。また、なぜキャラクターケースが違いを生むべきかわからない。 'JaFNam'や' jafnam'の検索とはどのように違うのですか? – Val
@Val eclipseとIntelliJ IDEは、この種の「ケース解釈」を使用しています。彼らは 'JaFNam'と' jafnam'を異なって解釈します。私は自分の検索に同じ動作を使用したい。 – slartidan
@Val 'edge_ngram'トークナイザの代わりに 'edge_ngram' *フィルタ*を使用して、望ましい動作を実現できますか? – slartidan