コレクションユーザーがいて、すべてのドキュメントは次のような構造になっています:
{
"username": "de",
"userId": 123456,
"followers":[
{
"userId":123,
"username": "bc",
},
{
"userId": 456,
"username": "ac",
}
}
その他のドキュメント:
{
"username": "a",
"userId": 123456,
"followers":[
{
"userId": 456,
"username": "ab",
}
}
「ユーザー名」フィールドにインデックスを付けたい(フォロワーではなく親)。私は次のようにします:
curl -XPUT http://localhost:9200/users -d '
{
"mappings":{
"multisearch":{
"properties":{
"username":{
"type":"string",
"analyzer":"partial_name",
"search_analyzer":"partial_name",
"index_analyzer":"partial_name"
}
}
}
},
"settings":{
"analysis":{
"filter":{
"name_ngrams":{
"side":"front",
"max_gram":20,
"min_gram":2,
"type":"NGram"
}
},
"analyzer":{
"full_name":{
"filter":[
"standard",
"lowercase",
"asciifolding"
],
"type":"custom",
"tokenizer":"standard"
},
"partial_name":{
"filter":[
"standard",
"lowercase",
"asciifolding",
"name_ngrams"
],
"type":"custom",
"tokenizer":"standard"
}
}
}
}
}'
そして、elasticsearch に新しい mongodb リバーを追加します。
curl -XPUT 'localhost:9200/_river/mongodb/_meta' -d '{
"type": "mongodb",
"mongodb": {
"servers": [
{"host": "Konoha", "port": 27018},
{"host": "Konoha", "port": 27027}
],
"db": "mydatabase",
"collection": "users",
"options": {
"secondary_read_preference": true,
"drop_collection": true
},
"gridfs": false
},
"index": {
"name": "users",
"type": "multisearch"
}
}'
そして今、キーワード「manh」で検索しようとすると、ブラウザで実行します:
http://localhost:9200/users/multisearch/_search?pretty=true&q=username:abc
その結果が、上で説明した 2 つのドキュメントです。ElasticSearchはフォロワーフィールドのフィールドユーザー名もインデックス化すると思いますか?
ユーザー名= abc(親)を持つ行のみが必要です
親フィールドのユーザー名のみのインデックス作成を手伝ってもらえますか?
助けてくれてありがとう:)
映画トレントのダウンロード