Выбранный ответ датируется некоторое время назад. Нецелесообразно объявлять каждую привязку в обычном связующем HK2. Я использую Tomcat, и мне просто нужно добавить одну зависимость. Несмотря на то, что он был разработан для Glassfish, он идеально вписывается в другие контейнеры.
org.glassfish.jersey.containers.glassfish
jersey-gf-cdi
${jersey.version}
Убедитесь, что ваш контейнер правильно настроен ( см. документацию ).
Если Вы хотите все документы, сделайте запрос на *:*
Если Вы хотите все документы с определенным полем (например, идентификатор) пробуют идентификатор: [* К *]
Lucene не позволяет Вам запускать WildcardQueries со звездочки по умолчанию, потому что это - невероятно дорогие запросы и будет очень, очень, очень медленно на больших индексах.
При использовании Lucene QueryParser назовите setAllowLeadingWildcard (верным) на нем для включения его.
Если Вы хотите все документы с определенным полевым набором, Вы - очень более обеспеченные запросы или обход индекса программно, чем использование QueryParser. Необходимо действительно только использовать QueryParser для парсинга ввода данных пользователем.
id:[a* TO z*] id:[0* TO 9*] etc.
Я просто сделал это в lukeall на моем индексе, и он работал, поэтому он должен работать в Solr, который использует стандартный анализатор запроса. Я на самом деле не использую Solr.
В основном Lucene существует прекрасная причина того, почему Вы никогда не запрашивали бы для каждого документа, это - потому что для запросов для документа необходимо использовать a new indexReader("DirectoryName")
и примените запрос к нему. Поэтому Вы могли полностью пропустить применение запроса к нему и использовать indexReader
методы numDocs()
получить количество всех документов, и document(int n)
получать любой из документов.
На самом деле я использовал обходное решение для этого. Я добавляю символ к идентификатору, например: A1, A2, и т.д.
С такими значениями в поле возможно искать использование запроса id:A*
Но хотел бы найти, существует ли истинное решение.
Я принимаю с идентификатором:* Вы просто пытаетесь соответствовать всем документам, правильно?
Я никогда не использовал solr прежде, но в моем опыте Lucene, при поглощении данных, мы добавили скрытое поле к каждому документу, затем когда мы должны возвратить каждую запись, мы делаем поиск строковой константы в том поле, это - то же для каждой записи.
Если Вы не можете добавить поле как этот в Вашей ситуации, Вы могли бы использовать RegexQuery с regex, который будет соответствовать чему-либо, что могло быть найдено в идентификационном поле.
Править: на самом деле ответ на вопрос. Я никогда не слышал о патче, чтобы заставить это работать, но я был бы удивлен, могло ли это даже быть сделано работать обоснованно хорошо. Посмотрите этот вопрос по причине, почему неограниченный PrefixQuery может вызвать проблему.
Если Вы просто пытаетесь получить все документы, Solr действительно поддерживает запрос *:*. Это - единственное время, которое я знаю того, что Solr позволит Вам начать запрос с *. Я уверен, что Вы, вероятно, рассматривали это как запрос по умолчанию на администраторской странице Solr.
При попытке сделать более определенный запрос с *, поскольку первый символ, как говорят идентификатор: *456 затем один из лучших способов, которыми я видел, состоит в том, чтобы индексировать то поле дважды. Однажды обычно (имя поля: идентификатор), и однажды со всеми инвертированными символами (имя поля: reverse_id). Затем Вы могли по существу сделать запрос id:456 путем отправки запроса reverse_id:654 вместо этого. Надежда, которая имеет смысл.
Можно также искать список рассылки группы пользователей Solr в http://www.mail-archive.com/solr-user@lucene.apache.org/, где вопросы как это подходят довольно часто.