Elasticsearchの長いデータ型でのワイルドカード検索の問題
Dec 02 2020
{
"from":0,
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"10*",
"lenient":true,
"fields":[
"phoneNumber"
],
"escape":true
}
}
]
}
}
}
ここでは、電話番号のタイプがlongであり、ワイルドカード検索を実行します。クエリを10 *( "query":"10*",
)として渡します。実際のヒット数は15であるはずですが、ヒット数は0です。
タイプkeyword(string)Addressのフィールドに対して同じことを行っている場合、クエリ"query":"newyork*",
を使用して結果を取得しています。
タイプが長いフィールドのヒットが得られなかった理由を誰かが知っていますか?
回答
2 ESCoder Dec 02 2020 at 21:24
数値データ型でワイルドカードを直接実行することはできません。それらの整数を文字列に変換することをお勧めします。
インデックスデータ、マッピング、検索クエリ、検索結果を使用した実用的な例の追加
インデックスマッピング:
{
"mappings": {
"properties": {
"phoneNumber": {
"type": "text"
}
}
}
}
インデックスデータ:
{
"phoneNumber": "101"
}
検索クエリ:
{
"query": {
"bool": {
"filter": [
{
"query_string": {
"query": "10*",
"fields": [
"phoneNumber"
]
}
}
]
}
}
}
検索結果:
"hits": [
{
"_index": "65109764",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"phoneNumber": "101"
}
}
]
部分一致を実行したい場合は、エッジn-gramトークナイザーを使用することもできます