Как мне реализовать поиск по тегам? с люценом?

Возможные решения - 1. Убедитесь, что у вас нет другого элемента с именем / id как submit. 2. Попробуйте вызвать функцию как onClick = "return submitAction();" 3. document.getElementById("form-name").submit();

13
задан 23 March 2010 в 05:20
поделиться

2 ответа

Lucene для .net кажется зрелым. Нет необходимости использовать Java или SOLR

. Стандартный язык запросов для Lucene допускает одинаковые ранжированные условия поиска и отрицание

Таким образом, если бы ваш индекс Lucene имел поле «тег», ваш запрос был бы

tag:apple* OR tag: carrot*

Это даст равный ранжирование каждому слову и большее ранжирование для документа с обоими тегами

Чтобы отменить тег, используйте этот

tag:carrot* NOT tag:apple*

Простой пример, показывающий индексацию и запросы с помощью Lucene здесь

14
ответ дан 1 December 2019 в 08:52
поделиться

Изменить: Вы можете использовать Lucene.Вот объяснение, как это сделать в Lucene.net. Некоторые основы Lucene:

  • Документ - это единица хранения в Lucene. Это в некоторой степени аналогично записи в базе данных.
  • Поле - поисковая единица в Люцене. Аналогичен столбцу базы данных. Lucene ищет текст, принимая запрос и сопоставляя его с полями. Поле должно быть проиндексировано, чтобы включить поиск.
  • Жетон - поисковый атом в Люцене. Обычно слово, иногда фраза, буква или цифра.
  • Анализатор - часть Lucene, преобразующая поле в токены.

Прочтите это сообщение в блоге о создании и использовании индекса Lucene.net.

Я полагаю, вы помечаете сообщения в блогах. Если я совершенно не прав, скажите об этом. Чтобы искать теги, вам необходимо представить их как объекты Lucene, а именно как токены внутри поля "теги".

Один из способов сделать это - назначить документ Lucene для каждого сообщения в блоге. Документ будет иметь как минимум следующие поля:

  • id: уникальный идентификатор сообщения в блоге.
  • content: текст сообщения в блоге.
  • теги: список тегов.

Индексирование: всякий раз, когда вы добавляете тег к сообщению, удаляете тег или редактируете его, вам нужно будет проиндексировать сообщение. Анализатор преобразует поля в их токен-представление.

Document doc = new Document();
doc.Add(new Field("id", i.ToString(), Field.Store.YES, Field.Index.NO));
doc.Add(new Field("content", text, Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("tags", tags, Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);

Оставшаяся часть - поиск. Для этого вам нужно создать QueryParser и передать ему строку запроса, например:

QueryParser qp = new QueryParser();
Query q = qp.Parse(s);
Hits = Searcher.Search(q);

Синтаксис, который вам понадобится для s, будет:

tags: apples tags: carrots

Для поиска яблок или моркови

tags: carrots NOT tags: apples

См. Синтаксис парсера запросов Lucene для получения подробной информации о создании s.

17
ответ дан 1 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: