Полнотекстовый поиск в базовой платформе данных Apple

Также ДОВОД "ПРОТИВ", PRN, AUX, NUL, COM# и немногие другие никогда не являются легальными именами файлов ни в каком каталоге ни с каким расширением.

9
задан Richard Slater 30 April 2017 в 11:12
поделиться

5 ответов

UPDATE

Как указано в другом ответе, приведенное ниже решение является «избыточным», поскольку удаляет MacPorts из вашей системы, что, как я думал, уже было сделано ранее. Продолжайте осторожно. Возможно, путь использовать MacPorts для обновления установки libxml2.


Я решил эту проблему (по крайней мере, на моей машине).

Как только я понял, что ничто в этом следе не говорит об отсутствии libxml2, а скорее о проблеме с обнаруживаемой версией, я посмотрел вокруг на подтверждение этого факта. Конечно, сайт nokogiri (где многие похожие сообщения о жучках указывали на меня) утверждает в неопределенных терминах, что Snow Leopard судит с хорошей рабочей версией libxml2.

Таким образом, я рассуждал, что я должен был установить версию другим способом давно. Я бы помнил, если бы я установил вручную, так что остался только один вариант, чертовы макпорты.

$ libxml2-2.7.1 tfwright$ sudo find / -type d -name "libxml2" 
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/Developer/SDKs/MacOSX10.4u.sdk/usr/include/libxml2
/Developer/SDKs/MacOSX10.5.sdk/usr/include/libxml2
/Developer/SDKs/MacOSX10.6.sdk/usr/include/libxml2
/opt/local/include/libxml2
/opt/local/share/gtk-doc/html/libxml2
/opt/local/var/macports/distfiles/libxml2
/opt/local/var/macports/receipts/libxml2
/opt/local/var/macports/software/libxml2
/opt/local/var/macports/software/libxml2/2.6.30_0/opt/local/include/libxml2
/opt/local/var/macports/software/libxml2/2.6.30_0/opt/local/share/gtk-doc/html/libxml2
/opt/local/var/macports/sources/rsync.macports.org/release/ports/textproc/libxml2
/usr/include/libxml2
/usr/share/gtk-doc/html/libxml2

Сын... просто сдув /opt/local/var/macports , который я пытался прежде всего, похоже, не исправить проблему, поэтому я пошел к большим пушкам .

sudo rm -rf \
/opt/local \
/Applications/DarwinPorts \
/Applications/MacPorts \
/Library/LaunchDaemons/org.macports.* \
/Library/Receipts/DarwinPorts*.pkg \
/Library/Receipts/MacPorts*.pkg \
/Library/StartupItems/DarwinPortsStartup \
/Library/Tcl/darwinports1.0 \
/Library/Tcl/macports1.0 \
~/.macports

После чего все устанавливается нормально. верно. Никогда не доверяйте рекомендациям сообщений об ошибках! Мне не нужно было переустановлять libxml2 с макпортами, а нужно было удалить все следы макпортов из моей системы , которая преследовала меня из-за мусора.

-121--3747479-

Вероятно, что вы не добавляете объект DOM, вы добавляете явный HTML-код к своей странице, и я сомневаюсь, что Safari обновляет DOM за кадром.

Попробуйте использовать фактические методы DOM, такие как document.createElement () , чтобы добавить входные данные в DOM, как описано в ряде мест (например, здесь или здесь или здесь ), а затем проверьте, сохраняется ли проблема Safari.

Все сказанное, путь вы описываете возникающую проблему - на кликах, но не на вкладках, например, - будет утверждать, что проблема не будет такой... так что теперь мне любопытно. (В любом случае, использование методов DOM действительно является правильным способом добавления элементов, поэтому в любом случае это не плохая идея.)

-121--2552722-

Мы FTS3 очень хорошо работаем над 150 000 + записей. Мы получаем субсекундное время запроса, возвращающее 200 результаты для одного запроса по ключевому слову.

В настоящее время единственный способ заставить Sqlite FTS3 работать на iPhone - это компилировать собственный двоичный файл и связывать его с вашим проектом. Насколько мне известно, двоичный файл, включенный в ваш собственный проект, не будет работать с Core Data. Возможно, Apple включит функцию компилятора FTS3 в будущем выпуске?

Вы по-прежнему можете связываться в собственном двоичном файле Sqlite FTS3 и использовать его только для полнотекстового поиска. Это будет очень похоже на то, как Sphinx или Lucene используются в средах Web App. Обратите внимание, что в какой-то момент вам все равно придется обновить поисковый индекс, чтобы сохранить синхронизацию с хранилищами основных данных.

Удачи!!

9
ответ дан 4 December 2019 в 21:10
поделиться

Я предполагаю, что " повторный поиск индексируется и использует BEGINSWITH [cd] вместо CONTAINS [cd] . Насколько я помню (пока не могу найти сообщение cocoa-dev), SQLite будет использовать индекс для сопоставления префиксов, но вернется к линейному поиску для поиска по инфиксам.

повторный поиск индексируется и использует BEGINSWITH [cd] вместо CONTAINS [cd] . Насколько я помню (пока не могу найти сообщение cocoa-dev), SQLite будет использовать индекс для сопоставления префиксов, но вернется к линейному поиску для поиска по инфиксам.

1
ответ дан 4 December 2019 в 21:10
поделиться

Я использую содержит [cd] в моем предикате, и это отлично работает. Возможно, вы могли бы опубликовать свой предикат, и мы могли бы увидеть, есть ли очевидная ошибка.

0
ответ дан 4 December 2019 в 21:10
поделиться

Sqlite has its own full text indexing module: http://sqlite.org/fts3.html

You have to have full control of the SQL you send to the db (I don't know how Core Data works), but using the full text indexing module is key to speed of execution and simplicity in your SQL SELECT statements that do full text searching.

Using CONTAINS is fine if you don't need fast execution, but selects made with it can't make use of regular indexes so are destined to be slow, and the larger the database the slower it will be. Using real full text indexing allows same sort of searches as you can do with 'CONTAINS', but things are indexed for fast results even with large db's.

0
ответ дан 4 December 2019 в 21:10
поделиться

Я работал над той же проблемой и только что набрался времени, чтобы следить за моим сообщением об этом, написанным несколько недель назад . Вместо использования CONTAINS я создал отдельную сущность с экземпляром для каждого канонизированного слова. Я добавил индекс для слов (в построителе моделей XCode), а затем могу использовать оператор BEGINSWITH для использования индекса. Тем не менее, как я только что написал несколько минут назад , время запроса все еще очень велико даже для небольших наборов данных.

Должен быть способ лучше! После всего,

0
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: