2016-05-06 9 views
0

私は弾性検索の春データを初めて利用していますが、今日はSpringデータESリポジトリを使用してクエリを取得しようとしていました。SpringデータElasticSearch Build INクエリが部分一致を返す

ユーザー名のリストを検索する必要があります。インデックス内で完全に一致する場合は、そのユーザーを結果として戻す必要があります。

私は組み込みのリポジトリ 'In'メソッドを使用しようとしましたが、部分一致が返されました。SQL INクエリのように動作するように助けてください。

ここに私のリポジトリのコードです:

public interface UserRepository extends ElasticsearchRepository<EsUser, String> 
{ 
    public List<EsUser> findByUserAccountUserNameIn(Collection<String> terms); 
} 

REQUEST:

{"terms":["vijay", "arun"], "type":"NAME"} 

応答:

[ 
    { 
    "userId": "236000", 
    "fbId": "", 
    "userAccount": { 
     "userName": "arun", 
     "urlFriendlyName": "arun", 
    }, 
    "userProfile": { 
    }, 
    "userStats": { 
    } 
    }, 
    { 
    "userId": "6228", 
    "userAccount": { 
     "userName": "vijay", 
     "urlFriendlyName": "vijay", 
    }, 
    "userProfile": { 
    }, 
    "userStats": { 
    } 
    }, 
    { 
    "userId": "236000", 
    "fbId": "", 
    "userAccount": { 
     "userName": "arun singh", 
     "urlFriendlyName": "arun-singh", 
    }, 
    "userProfile": { 
    }, 
    "userStats": { 
    } 
    } 
    { 
    "userId": "236000", 
    "fbId": "", 
    "userAccount": { 
     "userName": "vijay mohan", 
     "urlFriendlyName": "vijay-mohan", 
    }, 
    "userProfile": { 
    }, 
    "userStats": { 
    } 
    } 
] 
+0

あなたはクエリではなくフィルタを実行する必要があります –

答えて

1

あなたuserAccount.userNameフィールドは、このように分析した文字列であり、そしてこれは、 2つのトークンarunsinghが索引付けされています。あなたのクエリは最初のトークンと一致します。これは正常です。

その後
@Field(index = FieldIndex.not_analyzed) 
private String userName; 

あなたが/_templateであなたのインデックスと関連したテンプレートを削除する必要があります、再起動を:あなたはこのように、not_analyzedとして、あなたのフィールドを宣言する必要が完全に一致し、これを防止し、保証するために

新しいテンプレートとインデックスが適切なフィールドマッピングで作成されます。

これでクエリが機能します。

関連する問題