notesdocumentcollection.ftsearch и поисковый запрос со специальными символами
Я пытаюсь сделать функцию поиска в ssjs, которая выглядит следующим образом.
notesdocumentcollection.ftsearch('"*' + searchword + '*"');
У меня есть документ с этим значением поля "Доктор Макс Мустер". если я ищу "доктор", я получаю результат. если я ищу "доктор Макс", я не получаю результат. если я удалю шаблон и наберу "dr. max", я получу результат.
я тоже попробовал вот так
notesdocumentcollection.ftsearch('*' + searchword + '*');
Есть ли способ получить результат с подстановочными знаками и специальными символами в поисковом запросе?
PS Если я попробую это в notesclient в представлении, это будет работать.
РЕДАКТИРОВАТЬ: для этого запроса "др. Ма" я получил эти результаты отладки с сервера
IN FTGSearch option = 0x400089
[12CC:000A-1A30] Query: dr. ma
[12CC:000A-1A30] Engine Query: ("drma")
[12CC:000A-1A30] OUT FTGSearch error = F22
[12CC:000A-1A30] FTGSearch: found=0, returne
[12CC:000A-1A30] IN FTGSearch option = 0x40008C
[12CC:000A-1A30] Query: *"dr**ma"*
[12CC:000A-1A30] Engine Query: ("*dr**ma*")
[12CC:000A-1A30] OUT FTGSearch error = F22
[12CC:000A-1A30] FTGSearch: found=0, returned=0, start=0, count=0, limit=0
3 ответа
Хорошо, сначала поисковая система использует систему триграмм. Таким образом, поиск 2 символов не будет работать, как ожидалось. Дикие карты могут помочь, но нет никаких гарантий, что они получат все.
Итак, насколько я понимаю следующую часть, если вы вручную введете следующую строку в строку Полнотекстового поиска в клиенте заметок, и она работает? (цитаты включены)
"*dr. max*"
В клиенте Notes следует помнить одну вещь: вы можете активировать два разных режима поиска (переключитесь в основные настройки). Веб-запрос и запрос Notes.
По умолчанию веб-запрос включен (IIRC), поэтому вы выполняете поиск так же, как если бы вы использовали стандартные поисковые системы Интернета.
Если вы переключили его на запрос Notes или поиск начинается со слова с заглавными буквами, он использует синтаксис, который Notes использовал ранее.
Таким образом, возможно, вы видите различия между клиентом и XPages из-за этого.
Чтобы проверить это, вы можете отладить следующим образом. На консоли сервера Domino введите следующее.
set config DEBUG_THREADID=1
set config CONSOLE_LOG_ENABLED=1
set config Debug_FTV_Search=1
Теперь сделайте поиск в клиенте заметок и XPage. Это сгенерирует что-то вроде следующего на консоли Domino (примечание: я добавил цифры в начале для важных строк).
IN FTGSearch
[07FC:0048-0A94] option = 0x400219
1. [07FC:0048-0A94] Query: ("*test*")
2. [07FC:0048-0A94] Engine Query: ("*test*"%STEM)
3. [07FC:0048-0A94] GTR query performed in 6 ms. 5 documents found
4. [07FC:0048-0A94] 0 documents disualified by deletion
5. [07FC:0048-0A94] 0 documents disqualified by ACL
6. [07FC:0048-0A94] 0 documents disqualified by IDTable
7. [07FC:0048-0A94] 0 documents disqualified by NIF
8. [07FC:0048-0A94] Results marshalled in 3 ms. 5 documents left
9. [07FC:0048-0A94] OUT FTGSearch error = 0
[07FC:0048-0A94] FTGSearch: found=5, returned=5, start=0, count=0, limit=0
[07FC:0048-0A94] Total search time 10 ms.
Объяснение каждого бита.
- Строка, которую вы отправили в поисковик. В данном случае это был "тест" (с кавычками)
- Скомпилированная строка поиска.
- Сколько времени прошло и сколько документов найдено.
- Всего удалено, поскольку оно было помечено как удаленное.
- Всего удалено, так как у вас не было прав на их просмотр.
- Всего отброшено из-за результатов IDTable.
- Всего отклонено, поскольку они не будут отображаться в представлении, из которого вы выполняете поиск.
- Время заняло и оставшиеся документы.
- Если какие-либо ошибки произошли.
Так что сгенерируйте эти два результата поиска и опубликуйте их, если не очевидно, почему в нем упоминается, что они не работают
Синтаксис полнотекстового запроса Notes лучше хранится в тайне, чем квартиры в Disney Time (если вы когда-либо были в Disney, вы получаете дрейф).
Официальное руководство по синтаксису находится здесь: http://www-10.lotus.com/ldd/dominowiki.nsf/dx/full-text-syntax
Что мне очень помогло, так это взять searchsite.ntf и разорвать его на части. Внутри все концепции FTSearch были реализованы в рабочем стиле (работающий код превосходит документацию в любое время).
надеюсь, это поможет
Документация для FTSearch гласит заключать слова и фразы в кавычки. Так что попробуйте это (где вы заключаете переменную searchword в кавычки, а не подстановочный знак):
notesdocumentcollection.ftsearch('*"' + searchword + '"*');