• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Коллекция по совпадениям

  • Автор темы Автор темы wowa
  • Дата начала Дата начала
W

wowa

Раньше задавал этот вопрос............
Есть куча документов с полем , ..
в Этом поле много значений, "Республика", "Беларусь", "Республика Беларусь", "Беларусь Республика", "Республика моя Беларусь" и т.д. , вообщем куча вариантов

В строке поиска, делаю запрос, найти "Республика Беларусь"
stSearch = "Беларусь* or Республика*" (или эту строку надо как-то переделать)

КАк мне сделать запрос, чтобы получилась коллекция по совпадениям

Set dcCollection = db.FTSearch( stSearch , 0, FT_SCORES) ????????

т.е. чтобы в коллекции первые доки были со значением где есть эти два слова (Республика и Беларусь), а все остальные доки с любым одним словом
 
Так ведь отвечали уже... Сортируй свою коллекцию потом так, как тебе хочется... :D
 
Для: wowa
РУКАМИ, и вообще зачем спрашивать каждый раз одно и тоже! ?
 
Сделать два поиска. Получить две коллекции.
 
Для: Medevic
Т.е. сделать сначала коллекцию где строка запроса содержит and, а потом OR ????
stSearch = "Беларусь* or Республика*"
 
Для: wowa
Ага. Во второй коллекции пропускать документы, которые есть в первой. :D
 
Абажите! Давайте подумаем. Для этого обратимся к документаци :D.

TERMWEIGHT
termweight

This gives importance, or "weight," to search words. You can use any value from 0 through 65537 to assign weight.
Example: 'TERMWEIGHT 25 photo or TERMWEIGHT 75 audio or TERMWEIGHT 50 video' finds documents containing at least one of the words. 'Audio' is most important, 'video' is next, and 'photo' is least important. Notes ranks results accordingly. You need an AND or OR between first TERMWEIGHT and subsequent ones.
А если построить запрос таким обпазом: TERMWEIGHT 50 "Республик* Беларус*" OR TERMWEIGHT 25 "Республик*" OR TERMWEIGHT 25 "Республик*"?
 
тада уже не TERMWEIGHT 50 "Республик* Беларус*" , а TERMWEIGHT 50 "Республика Беларусь"

А то он выберет тебе еще и "Рестпублика Боливия - это вам не Беларусь" :D
 
<!--QuoteBegin-Medevic+8:10:2007, 13:50 -->
<span class="vbquote">(Medevic @ 8:10:2007, 13:50 )</span><!--QuoteEBegin-->Ага. Во второй коллекции пропускать документы, которые есть в первой.
[snapback]80972" rel="nofollow" target="_blank[/snapback]​
[/quote]
А если в строке запроса 3 слова,.... то документы имеющие значения поля в одно и два совпадающих слова будут перемешиваться


<!--QuoteBegin-Mihal+8:10:2007, 13:51 -->
<span class="vbquote">(Mihal @ 8:10:2007, 13:51 )</span><!--QuoteEBegin-->А если построить запрос таким обпазом: TERMWEIGHT 50 "Республик* Беларус*" OR TERMWEIGHT 25 "Республик*" OR TERMWEIGHT 25 "Республик*"?
[snapback]80973" rel="nofollow" target="_blank[/snapback]​
[/quote]

Вот тут я что-то не совсем понял....
stSearch = "FIELD имя_поля = "TERMWEIGHT 50 "Республик* Беларус*" OR TERMWEIGHT 25 "Республик*" OR TERMWEIGHT 25 "Республик*"" ???
 
Сань, я ко всему отношусь как можно проще и не пложу лишних сущностей :P .
Если гаписано
чтобы в коллекции первые доки были со значением где есть эти два слова (Республика и Беларусь), а все остальные доки с любым одним словом
, значит так и делаем без всяких додумываний :D.


<!--QuoteBegin-wowa+8:10:2007, 14:04 -->
<span class="vbquote">(wowa @ 8:10:2007, 14:04 )</span><!--QuoteEBegin-->Вот тут я что-то не совсем понял....
stSearch = FIELD имя_поля = "TERMWEIGHT 50 "Республик* Беларус*" OR TERMWEIGHT 25 "Республик*" OR TERMWEIGHT 25 "Республик*"" ???
[snapback]80975" rel="nofollow" target="_blank[/snapback]​
[/quote]
Что надо-то? Найти доки со словами "республика" или "Белорусь"? Или найти доки, в которых в конкретных итемах есть "республика" и "Беларусь"? В описании проблемы ни слова нету о итемах или полях, между прочим.
 
<!--QuoteBegin-wowa+8:10:2007, 13:25 -->
<span class="vbquote">(wowa @ 8:10:2007, 13:25 )</span><!--QuoteEBegin-->Есть куча документов с полем , ..
в Этом поле много значений, "Республика
[snapback]80963" rel="nofollow" target="_blank[/snapback]​
[/quote]
По полю конкретному... Сорри за неполное высказывание проблемы..
 
(TERMWEIGHT 50 "Республик* Беларус*" AND [Memo]="Республик* Беларус*") OR (TERMWEIGHT 25 "Республик*" AND [Memo]="Республик*") OR (TERMWEIGHT 25 "Беларус*" AND [Memo]="Беларус*")

Попробуйте! А потом раскажите как получилось. Самомо интересно!
 
Для: Mihal
Круто, почти работает
"Беларусь " заносит вниз, а "Республика Беларусь" и "Республика" перемешивает ... где-то надо OR на AND заменить или наоборот


Для: Mihal
Большое спасибо, сам бы не дадумался
Для FTSearch


(TERMWEIGHT 50 ""Республика Беларусь"" AND FIELD имя_поля=""Республика Беларусь"") OR ( (TERMWEIGHT 25 ""Республика"" AND имя_поля=""Республика"") or (TERMWEIGHT 25 ""Беларусь"" AND FIELD имя_поля=""Беларусь"") )


Добавил скобочки и заработало (выделил какие)
 
хотя непонятно, то оно все нормально делает, то опять "Республика" и "Республика Беларусь" перемешивает... а "Беларусь" все нормально, - в конце
 
<!--QuoteBegin-wowa+8:10:2007, 15:47 -->
<span class="vbquote">(wowa @ 8:10:2007, 15:47 )</span><!--QuoteEBegin-->хотя непонятно, то оно все нормально делает, то опять "Республика" и "Республика Беларусь" перемешивает... а "Беларусь" все нормально, - в конце
[snapback]80990" rel="nofollow" target="_blank[/snapback]​
[/quote]

А если первым вхождением сделать так:
TERMWEIGHT 50 ""Республика Беларусь"" AND FIELD имя_поля=""Беларусь"" AND FIELD имя_поля=""Республика ""
?

Там же ещё всякие фази сёрчи ещё могут влиять.

Ой блин! На выходе ж получаем NotesDOcumentCollection :D. А там порядок документов определяется трансциндентным образом :P. Гы-гы. Хотя, опять же, в документации есть следующее:
The collection of documents that match the full-text query are sorted by relevance with highest relevance first. You can access the relevance score of each document in the collection using the FTSearchScore property in NotesDocument.

В общем, надо поэксперементировать. Убедится правильно ли сортирует по релевантности в принципе. Для этого запрос надо в поиск по вьюхе загнать. Потом переходить к колекции. на крайняк отсортировать собственоручно опираясь на FTSearchScore.

Дорогу осилит идущий!

P.S. Интуиция подсказывает, что достаточно будет разноса "Республика Беларусь" по двум разным условиям с AND.
P.P.S. А я родился в городе Калинковичи Гомельской области! ;)
 
Да! Вот эти дополнительный скопки меня смущают. Вряд ли в них дело.
 
Да, дело не в скобках.....Поизменял TERMWEIGHT , вроде как-то лучше стало работать

<!--QuoteBegin-Mihal+8:10:2007, 13:51 -->
<span class="vbquote">(Mihal @ 8:10:2007, 13:51 )</span><!--QuoteEBegin-->Для этого обратимся к документаци
[snapback]80973" rel="nofollow" target="_blank[/snapback]​
[/quote]
А что за документация?? В хелпе я что-то не нашел..
 
<!--QuoteBegin-wowa+8:10:2007, 19:26 -->
<span class="vbquote">(wowa @ 8:10:2007, 19:26 )</span><!--QuoteEBegin-->А что за документация?? В хелпе я что-то не нашел..
[snapback]81024" rel="nofollow" target="_blank[/snapback]​
[/quote]
Метод FTSearch класса NotesDatabase B)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab