MongoとSpringを使用した加重部分テキスト検索を実装しようとしています。マイMongoの文書は、このように構成されています。私がやりたい入れ子オブジェクトフィールドの加重を使用したSpring Mongob部分テキスト検索
{
"_id" : ObjectId("5947d610659f8e614887cbc9"),
"_class" : "co.ecg.alpaca.model.SearchIndexEntry",
"type" : "GroupAccessDevice",
"deviceId" : "Bogus_Device",
"devicesName" : "Bogus Device",
"properties" : {
"deviceType" : "Polycom VVX 500",
"netAddress" : "",
"macAddress" : "000111222111",
"serviceProviderId" : "Bogus",
"availablePorts" : "12",
"groupId" : "Bogus_Group",
"version" : ""
},
"tags" : [
{
"tag" : "Bogus_Device",
"score" : 10
},
{
"tag" : "Bogus Device",
"score" : 9
},
{
"tag" : "000111222111",
"score" : 7
},
{
"tag" : "Bogus_Group",
"score" : 3
},
{
"tag" : "Bogus",
"score" : 3
}
],
"createdBy" : "ALPACA_SYSTEM",
"createdDate" : ISODate("2017-06-19T13:48:00.473Z"),
"lastModifiedBy" : "ALPACA_SYSTEM",
"lastModifiedDate" : ISODate("2017-06-19T13:48:00.473Z"),
"cluster" : DBRef("broadworks_cluster", ObjectId("5947d60a659f8e614887cb1a")),
"parent" : DBRef("search_index", ObjectId("5947d610659f8e614887cbb7"))
}
何tag.nameに対して部分正規表現検索を使用して、正規表現とタグ間のレーベンシュタイン距離を乗じたtag.scoreによってそれらを並べ替えるです。名。私の質問は、これはMongoの1つのクエリ、おそらくいくつかの種類の集計で可能ですか?
組換えフレームワークでLevenshteinの距離を行うことはできません。少なくとも、組換えははるかに複雑であるため、 'kitten - > sitten'の場合はそうではありません。あなたがここでできることは、正規表現として 'Bogus'をマッチさせ、' $ unwind'の後で、 '' $ strLenCP'(https://docs.mongodb.com)で文字列の長さを調べるだけです。/manual/reference/operator/aggregation/strLenCP /)を参照してください。しかし、演算子にはMongoDB 3.4が必要です。 –
関連[MongoDBを "like"で照会する方法](https://stackoverflow.com/q/3305561/2313887)そして、[MongoDBコレクションのオブジェクト配列内の照会された要素のみを取得する](https://stackoverflow.com/q/3985214/2313887) –