Это старый и написанный на VB, но принцип, который, как я думаю, будет работать для вас.
Этот код не полностью ограничивает изображения, в которых есть все теги, вместо этого они нажимают на изображения с наибольшим количеством тегов.
Этот код работает с идеей показать пользователю то, что подходит лучше всего, но затем дать им другие варианты ниже. Где, когда ваш сценарий И вырезал бы что-то, что работало для 4 из 5 тегов. В этом случае они просто показывают ниже тегов, которые были 5 из 5.
Итак, если у вас какие-то изображения с тегами, как:
Предоставлено:
Изображение1 женщина, собака, панда
Image2 женщина, телефон, улыбаясь
Image3 человек, собака, панда, банан
image4 человек, телефон, улыбаясь
Выход:
Поиск тег "телефон улыбается" забьет [Image2] и [image4] в верхней части списка.
Поиск тегов «panda» принесет только Image1 и Image3.
Поиск тегов в «банане для собак-собачьего панта» даст изображение 3 в качестве вершины, за которым следует Image1, а затем изображение4.
Эта реализация предназначена для поиска лучшего изображения на основе тегов.
Вы можете создать 3 таблицы в базе данных SQL, как таковой (если вы делаете веб-страниц или истории или что-то изменить изображение, что для вашей собственной ясности):
SQL таблицы:
imageTag [INT ID, String Tag]
imageImages [INT ID, NVARCHAR(2000) Path]
imageConnections [INT TagID, INT ImageID]
Код VB.NET:
'The beef of the SQL statement to get the scored results is here.
Dim SearchString As String =
"SELECT it.path, count(it.path) AS cnt, it.Id, it.name, it.description, it.updated FROM imageimages AS it, imageconnections AS itt, imagetags AS t WHERE " + _
"{REPLACE-TAG} AND t.id = itt.tagid AND it.id = itt.imageid " + _
"GROUP BY Path, it.ID, it.name, it.description, it.updated ORDER BY cnt DESC"
Dim keywords As String() = tstSearch.Text.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)
If keywords.Length > 0 Then
Dim strReplacement As String
strReplacement = "(tag = '" + keywords(0) + "'"
If keywords.Length > 1 Then
For i As Integer = 1 To keywords.Length - 1
strReplacement += " OR tag = '" + keywords(i) + "'"
Next
End If
strReplacement += ")"
SearchString = SearchString.Replace("{REPLACE-TAG}", strReplacement)
dt = tran.GetDataTable(SearchString)
End If
Thanks Carter! Настолько практичное решение. Я попробую с VB.NET. Спасибо mate ~ – Graphite