Я пытаюсь собрать тестовый пример для использования Lucene.NET на одном из наших веб-сайтов. Я хотел бы сделать следующее:
Индекс в одном уникальном идентификаторе.
Индексировать через строку с разделителями-запятыми терминов или тегов.
Например.
Элемент 1:
Id = 1
Тэги = что-то, разделенные-срок
Затем я структурирую поиск, чтобы можно было искать документы по тегу, т. Е.
теги: что-то ИЛИ теги: отдельный термин
Мне нужно сохранить точное значение термина для поиска по нему.
У меня что-то работает, и поисковый запрос анализируется, как и ожидалось, но я не вижу никаких результатов. Вот некоторый код.
Мой анализатор (_luceneAnalyzer передается в мою службу индексации):
var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_CURRENT, "Tags", _luceneAnalyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
return parser;
Создание моего документа Lucene.NET:
var doc = new Document();
var id = new Field(
"Id",
NumericUtils.IntToPrefixCoded(indexObject.id),
Field.Store.YES,
Field.Index.NOT_ANALYZED,
Field.TermVector.NO);
var tags = new Field(
"Tags",
string.Join(",", indexObject.Tags.ToArray()),
Field.Store.NO,
Field.Index.ANALYZED,
Field.TermVector.YES);
doc.Add(id);
doc.Add(tags);
return doc;
Мой поиск:
var parser = BuildQueryParser();
var query = parser.Parse(searchQuery);
var searcher = Searcher;
TopDocs hits = searcher.Search(query, null, max);
IList<SearchResult> result = new List<SearchResult>();
float scoreNorm = 1.0f / hits.GetMaxScore();
for (int i = 0; i < hits.scoreDocs.Length; i++)
{
float score = hits.scoreDocs[i].score * scoreNorm;
result.Add(CreateSearchResult(searcher.Doc(hits.scoreDocs[i].doc), score));
}
return result;
У меня есть два документа в моем индексе, один с тегом "Что-то" и один с тегами "Что-то" и "Отдельный термин" Для ... важно оставаться в терминах, так как я хочу точное совпадение по полной стоимости.
Когда я выполняю поиск по тегам: что-то, я не получаю никаких результатов.
Вопрос
Какой анализатор я должен использовать для получения поискового индекса, который мне нужен?
Есть ли какие-нибудь указатели для того, чтобы собрать подобный поиск?
Почему мой текущий поиск не возвращает никаких результатов?
Большое спасибо