Доступ к Microsoft Access имеет полный текстовый поиск?
Доступна ли в Microsoft Access полнотекстовый поиск?
Я знаю, что MySQL и SQL Server имеют полнотекстовый поиск, но я не уверен в Access.
Если Access не имеет полного текста, что является лучшей альтернативой для достижения той же цели полнотекстового поиска?
Спасибо
Ответы
Ответ 1
Я не уверен на 100%, но тот факт, что этот сайт от Microsoft не упоминает, что Access предлагает мне, чтобы ответ "нет".
Моя реакция кишки также будет "нет". Доступ не должен был быть ne plus ultra в технологии реляционных баз данных. Если бы это было так, для SQL Server не было бы причин.
Ответ 2
Первым шагом в полнотекстовом поиске является создание списка слов, содержащего все слова в базе данных. Полнотекстовый поиск также имеет другие функции, такие как stemming, который связывает производные слова с базовым словом (быстрым, быстрым и быстрым), и он останавливает слова, которые игнорируются, потому что они настолько распространены (и,). Небольшой код VBA может генерировать список слов, который можно визуально сканировать. С небольшим количеством работы можно было бы использовать код для проверки списка слов прежде, чем искать базу данных, и это может ускорить поиск. Ниже приведен код, который я создал для этой цели. Его реальное приложение - найти имена людей в базе данных, чтобы я мог удалить или изменить их для защиты частной жизни, и как биолог, я хочу выделить курсивом научные имена в отчетах. Если я могу создать список научных имен, то я могу заменить их именем, заключенным в теги html.
Код работает хорошо, но я не тестировал его широко или против больших полей memo/rich text fields. Это было написано в Access 2010.
'This code requires a table called tblWordList with fields called Word (str 255), WordCount (long), FirstCopyID (long)
Option Compare Database
Option Explicit
'Click on this procedure and press F5 to run the code
Private Sub ScopeWordList()
'A list of tables and fields that need to be processed
Call CreateWordList("Issues", "IssueSummary", "IssueID")
End Sub
'The main routine that finds new words
Public Sub CreateWordList(TableName As String, FieldName As String, ForeignKey As String)
Dim dbs As Database
Dim rst As Recordset
Dim SQL_Statement As String
Dim r As Recordset
Dim RowText As String
Dim OriginalWord As String
Dim SearchWord As String
Dim SearchTerm As String
Dim Quote As String: Quote = Chr$(34)
Dim i As Long
Dim RecNum As Long
SQL_Statement = "SELECT " & FieldName & ", " & ForeignKey & " AS FirstCopyID FROM " & TableName & " WHERE " & FieldName & " IS NOT NULL;"
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(SQL_Statement, dbOpenSnapshot)
Set r = dbs.OpenRecordset("tblWordCounts", dbOpenTable)
r.Index = "Word"
With rst
If .RecordCount = 0 Then GoTo ExitCreateWordList
Do Until .EOF
Dim RowWords As Variant 'holds an array which needs to be created
RowText = .Fields(0)
'strip out quotes, slashes and other characters
RowText = CleanLine(RowText)
'split data into words
RowWords = Split(RowText, Space(1))
For i = LBound(RowWords) To UBound(RowWords)
OriginalWord = RowWords(i)
SearchWord = Left(Trim(OriginalWord), 254)
If Len(SearchWord) > 0 Then
r.Seek "=", SearchWord
If r.NoMatch Then
r.AddNew
r!Word = SearchWord
r!wordcount = 1
'records ID field of first occurrence, so you can debug unexpected results
r!FirstCopyID = !FirstCopyID
r.Update
Else
r.Edit
r!wordcount = r!wordcount + 1
r.Update
End If
End If
' End If
Next i
RecNum = RecNum + 1
If RecNum Mod 20 = 0 Then Debug.Print "Record " & RecNum
.MoveNext
Loop
ExitCreateWordList:
End With
Debug.Print "Done"
Set rst = Nothing
Set dbs = Nothing
End Sub
'Need to clean out unwanted characters and replace then with normal spaces
Private Function CleanLine(RowText As String) As String
Dim X As Long
Dim Y As String
Dim Z As Long
Dim W As String
For X = 1 To Len(RowText)
Y = Mid(RowText, X, 1)
Z = Asc(Y)
Select Case Z
Case 65 To 90 'capital letters
W = W & Y
Case 97 To 122 'lowercase letters
W = W & Y
Case Else
W = W & Space(1)
End Select
Next
CleanLine = W
End Function
'Delete all records in Word List table
Public Sub ClearWordList()
Dim SQL_Statement As String
'Delete all records from tblWordCounts
SQL_Statement = "DELETE FROM tblWordCounts"
DoCmd.SetWarnings False
DoCmd.RunSQL SQL_Statement
DoCmd.SetWarnings True
End Sub
Ответ 3
MSDE (теперь называемый Sql Server Express) имеет полнотекстовую индексацию, если вы ищете базу для развертывания клиента
Ответ 4
Пример кода, который @duffymo обеспечивает работу очень хорошо. Я использую его с Microsoft Access 2003. Но необходимо несколько исправлений.
-
Таблица должна быть определена как:
"Этот код требует таблицы с именем tblWordList с полями Word (текст 255), WordCount (число), FirstCopyID (число)
-
Другое исправление tblWordCounts необходимо заменить на tblWordList, и, конечно, Call CreateWordList необходимо изменить на таблицу и поле, которые необходимо отправить в tblWordList.
В 5000-столовой таблице он работал так быстро, что я думал, что это не сработало, когда я нажал на Sub ScopeWordList() и нажал F5, но модуль создал список слов с более чем 700 различными записей (для моей таблицы данных). Спасибо @duffymo за некоторый аккуратный пример кода.
Ответ 5
Доступ не является базой данных. Но он поставляется с механизмом базы данных по умолчанию, Jet/ACE. Я бы предположил, что вы имеете в виду, но вам должно быть более ясно, что вы имеете в виду, когда задаете такой вопрос.
Jet/ACE не имеет полнотекстовых возможностей поиска.
Лучший способ выполнять полнотекстовый поиск файлов данных Jet/ACE - это любые возможности полнотекстового поиска для файлов на вашем компьютере. Это не будет быстрым, и он не будет использоваться через SQL.
Вы не говорите, в каком контексте это, но я вообще никогда не видел необходимости в полнотекстовом поиске, кроме как на веб-сайтах (где это что-то вроде ожидаемой возможности). Если вы используете Jet/ACE в качестве хранилища данных для приложения HTTP, вы выбрали неправильное хранилище данных. В то время как Jet/ACE может работать нормально для малообъемных веб-сайтов только для чтения, это не рекомендуется использовать (из-за ограничений в двигателе базы данных Jet/ACE).
Если вам нужен полнотекстовый поиск, вам нужен другой механизм базы данных.
Ответ 6
http://www.dummies.com/how-to/content/finding-records-in-your-access-2003-tables.html
Об использовании инструмента поиска. Я еще не пробовал, и я не уверен, работает ли он на полях заметок.