Nano Hash - криптовалюты, майнинг, программирование

Позиция документа в наборе результатов в Solr

Мне нужно знать положение документа в результатах Solr. Позвольте мне объяснить, почему. Мы хотим показать пользователю позицию его товара в поиске (чтобы пользователь мог купить продвижение и продвинуть его вверх). Теперь я просматриваю все страницы, пока не найду документ, но он генерирует много вызовов Solr. Есть ли способ получить идентификатор и позицию запроса элемента? Предпочтительно по списку идентификаторов, чтобы я мог запросить его за один раз.

Пример запроса:

/search?sort=sort_time%20desc&fq=category_parent_id:2003&rows=15&q=&start=0

Образец документа:

{
    sort_time: 1421747930,
    id: 146002852,
    catlevel2: "Volvo",
    catlevel1: "Auto's",
    description: "Volvo XC90",
    score: 6.4758344
}
16.01.2015

  • Вы видели этот ответ? Или это? 20.01.2015
  • @mindas Я видел их обоих, мне не удалось извлечь из них какие-либо полезные решения. Если сможешь - пожалуйста, я сразу же награжу тебя. 20.01.2015
  • Можете ли вы добавить образец документа в вопрос? Более того, ваши документы упорядочены по числовому полю? 20.01.2015
  • Сколько документов в индексе? 20.01.2015
  • @IonCojocaru проверьте обновление, пожалуйста 20.01.2015
  • @cheffe всего где-то около 4 миллионов. 20.01.2015
  • хм, ваш пример запроса несколько сбивает с толку. Вы сортируете по sort_time, так почему бы не подсчитать все документы, у которых sort_time больше/меньше? 20.01.2015
  • @cheffe — это поисковый запрос, который используется для представления данных пользователю. Я хочу иметь возможность определить позицию документа в этом запросе. 20.01.2015

Ответы:


1

Вы сортируете по «sort_time», которое выглядит как отметка времени в миллисекундах.

Давайте сделаем следующее: запросим все результаты, которые имеют «sort_time» между 1421747930 и СЕЙЧАС, с запросом диапазона. Это даст вам "количество" результатов даже в первом наборе результатов. Если вы заказываете по «sort_time desc», ваша желаемая позиция — «count», так как ваш результат будет последним в этом запросе диапазона. Попробуйте тот же запрос, добавив, например, «sort_time:[1421747930 TO NOW]» (это может быть не точный синтаксис, проверьте его). Если вы получите в общей сложности 137 результатов, позиция 1421747930 будет 137. Myeb, вам нужно максимальное «sort_time» вместо NOW и т. д. Надеюсь, вы поняли идею.

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

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

26.01.2015
  • Это отлично работает, это довольно простое решение, почему я сам его не придумал :) С большим удовольствием присуждаю вам награду. 26.01.2015

  • 2

    Я использовал приведенный ниже подход для передачи списка идентификаторов одним выстрелом в поисковый запрос solr.

    Сначала обработайте список idlist на стороне Java и сделайте строку запроса примерно такой

    String qry = "id:1 OR id:2 OR id:6"
    SolrQuery solrQry         = new SolrQuery();
    solrQry.set("q", qry);
    
    SolrServer solrServer = new HttpSolrServer(SOLR_SERVER_URL);
    QueryResponse response =  solrServer.query(solrQuery);          
    
    20.01.2015
  • Это просто вернет 3 элемента и не покажет их положение в общем запросе. 20.01.2015
  • Да, таким образом вы можете получить n документов на основе списка идентификаторов документов. Для позиции документа из результатов поиска вы можете реализовать что-то вроде итератора списка, чтобы получить позицию элемента результата. 21.01.2015
  • Как я могу, передав идентификаторы, определить позицию в поиске? 21.01.2015

  • 3

    Позиция элемента в результатах поиска зависит от его оценки, которая не уникальна, поэтому вы не можете точно получить элемент по его положению в результатах поиска. Но вы можете ограничить свой запрос и отсортировать элементы по количеству баллов: CommonQueryParameters

    26.01.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..