LINUX.ORG.RU
ФорумTalks

Не-не-не. Поиск по сайту. LOR в частности. OpenSearch.

 ,


0

3

Про закрытую тему Поиск по сайту плохо работает .

Что-то хамское поведение модераторов в той теме заставило аж локальную копию ЛОРа развернуть у себя на локалхосте.

Я же правильно понимаю, что

"must": [
  {
    "bool": {
      "should": [
        {
          "match": {
            "title": {
              "query": "первоеслово второеслово",
              "minimum_should_match": "2"
            }
          }
        },
        {
          "match": {
            "message": {
               "query": "первоеслово второеслово",
               "minimum_should_match": "2"
            }
          }
        }
     ]
    }
  }
]
по-хорошему было бы и по весам разделить («weight», «multi_match»), а вероятно ещё и поле topic_title в поиск добавить кроме этих двух?

Там черт ногу сломит в этой Java/Scala/jsp... Вижу только то, что долетает до самого OpenSearch в запросе.

Есть кто силён в Эластиках? Как у вас поиск по сайтам сделан?

★★★★★

Последнее исправление: Toxo2 (всего исправлений: 1)

Вот непонятно. У тебя же 5 звёзд. Хватит для темы в техническом разделе. Или ты про жизнь поговорить хочешь?

imul ★★★★★
()

Пишу по старо-древней памяти:

bool:
  minimum_should_match: 1
  should: [
    term:
      title: первоеслово второеслово
      boost: 0.8
    term:
      message: первоеслово второеслово
      boost: 0.6
    topic_title:
      query: первоеслово второеслово
      boost: 0.8
  ]


Но искать НЕ будет, если первоеслово в одном поле, а второеслово в другом поле. Возможно, надо на уровне индекса определить какое-нибудь _all поле, куда будут сбрасываться все поля, и по нему искать, определив веса прямо в маппинге. Возможно, строку в term.message нужно токенизированным массивом передавать, не помню.

А вообще, для поиска можно использовать yandex => «site:linux.org.ru твой поисковый запрос».

shahid ★★★★★
()
Последнее исправление: shahid (всего исправлений: 1)
Ответ на: комментарий от shahid

С чего это лучше и зачем тогда встроенный в форум поиск?

mittorn ★★★★★
()
Ответ на: комментарий от shahid

Спасибо, интересно.

Я так понял - в файле SearchViewer.scala строчки 39 и 40 поменять на

  MatchQuery("title", queryText, None, Some(2.0)).minimumShouldMatch("2"),
  MatchQuery("message", queryText, None, Some(0.5)).minimumShouldMatch("2")))
и выхлоп получается более/менее похожий на то, что хотел bryak

Глубоко не копал, направление примерно понятно.

Toxo2 ★★★★★
() автор топика
Ответ на: комментарий от bdrbt

Это я в курсе. Сам так и делаю.

Интересно было именно с ELK поиграть по случаю. Так-то обычно trgm и tsvector хватает. В RAG тоже уже играл. А с Эластиком никогда дел не имел.

Toxo2 ★★★★★
() автор топика

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

Если запрос "первоеслово второеслово" то в топе найденного должны быть те, где эта подстрока прямо в таком виде и встречается - два слова именно в таком порядке, с пробелом посередине. Опционально, с такой же релевантностью могут быть варианты где вместо пробела какие-нить знаки препинания, а у слов другие окончания, но это не сильно важно и в целом можно и забить.

Все остальные же варианты, где эти два слова идут не подряд или не в том порядке - однозначно должны считаться менее релевантными.

И вроде бы это реализовать совсем не сложно, для поиска точного совпадения никаких специальных инструментов не требуется.

И зачем было закрывать оригинальную тему тоже не пойму.

firkax ★★★★★
()

В топике кстати не весь запрос приведен, а только его часть.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Может и сделано но работает как-то не полностью. Если ввести прям точное название темы пример то тему и правда находит среди других точных совпадений в топе (хотя возможно это случайное совпадение), впрочем вверху куча тем где это точное совпадение в теле, а не в топике, хорошо бы их менее релевантными посчитать чем точное совпадение в заголовке. Но это не особо важно наверно.

А вот если ввести точную подстроку из названия темы (уберём первое слово и пробел который его отделял от второго) пример то у меня находится такое:

1) «Поиск по сайту плохо работает» (есть точное совпадение в теле)

2) «Кто-нибудь может редактировать прикреплённую тему в Games?» (есть точное совпадение в теле)

3) «Проприетарные игры со свободным движком» (есть точное совпадение в теле и точное-с-учётом-орфографии в заголовке)

4) «Игры на движке Source + многопользовательская (multiseat) машина» (точного совпадения нигде нет, не говоря уж о том что слово «свободных» тут вообще не встречается)

Дальше идёт ещё 6 пунктов без точного совпадения, в каких-то встречены все указанные слова, в каких-то нет. Искомая тема с совпадающим по подстроке заголовком только на 11-м месте.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)
Ответ на: комментарий от maxcom

В этих запросах из примера теперь обычные темы вперёд точно-совпадающих вроде не лезут, то есть стало лучше.

firkax ★★★★★
()
Ответ на: комментарий от maxcom

лучше ли стало или нет

Да, намного лучше!

dataman ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)