Member 13517891 Ответов: 2

Как читать несколько файлов .cfs из lucene.чистые индексные файлы на языке Си#


Ниже блок кода предназначен для создания индекса. Он создает дополнительный файл .cfs всякий раз, когда я выполняю код.
using (var directory = GetDirectory())
using (var analyzer = GetAnalyzer())
using (var writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
{
    
    foreach (var pg in lstPage)
    {
        try {
            var document = AddDoc(pg);

            if (isScheduled.ToUpper() != "T")
            {
                Term trm = new Term(pg.Id.ToString(), "Id");
                writer.DeleteDocuments(trm);
            }

            writer.AddDocument(document);

        } catch (Exception exIndx)
        {
            sbLog.AppendLine("exIndx->" + exIndx);
        }
        
    }
}

Таким образом, проблема здесь заключается в том, что функция поиска должна применять поиск по нескольким файлам .cfs, но этого не происходит. ниже приведен код поиска
static List<Page> Search(string keywords, int limit, out int count)
{
    using (var directory = GetDirectory())
    using (var searcher = new IndexSearcher(directory))
    {
        var query = GetQuery(keywords);
        var sort = GetSort();
        var filter = GetFilter();

        var docs = searcher.Search(query, filter, limit, sort);
        count = docs.TotalHits;

        var products = new List<Page>();
        foreach (var scoreDoc in docs.ScoreDocs)
        {
            var doc = searcher.Doc(scoreDoc.Doc);
            var product = new Page
            {
                Id = int.Parse(doc.Get("Id")),
                name = doc.Get("url").Substring(doc.Get("url").LastIndexOf("/") + 1, doc.Get("url").Length - doc.Get("url").LastIndexOf("/") - 1),
                data = doc.Get("data"),
                url = doc.Get("url")
            };

            if (!products.Any(x => x.Id == product.Id)) 
            products.Add(product);
        }

        return products;
    }
}


Что я уже пробовал:

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

2 Ответов

Рейтинг:
1

Garth J Lancaster

Это не совсем очевидно, что происходит .. Я бы изменился

using (var directory = GetDirectory())
к
using (var directory = GetDirectory(@"C:\Some-Directory\Indexes", true))
в создателе индекса убедитесь, что индексы генерируются, а затем, когда вы знаете, что индексы создаются, используйте тот же каталог, например
using (var directory = GetDirectory(@"C:\Some-Directory\Indexes"))
во 2-м фрагменте кода, использующем индексы

Был один пример, который я видел здесь Создавайте и извлекайте информацию из индекса с помощью Lucene.NET – Tier-1[^] это может помочь


Рейтинг:
1

Member 13517891

В моем случае это не работает. Мое требование заключается в том, что сегодня я могу создать индекс для www.sample.com/page1.aspx, www.sample.com/page2.aspx страницы. Завтра я могу создать индекс для www.sample.com/page3.aspx-да. Если я ищу индекс, то поиск должен применяться на всех 3 страницах.

В этом случае, когда я ежедневно создаю индекс с новыми URL-адресами страниц, его создание файлов cfs, таких как _0.cfs, _1.cfs, _2.cfs и т. д., а также файл сегмента обновляются.

Меня тут ударили. Может ли кто-нибудь, пожалуйста, направить меня.


Member 13517891

В моем случае это не работает. Мое требование заключается в том, что сегодня я могу создать индекс для www.sample.com/page1.aspx, www.sample.com/page2.aspx страницы. Завтра я могу создать индекс для www.sample.com/page3.aspx-да. Если я ищу индекс, то поиск должен применяться на всех 3 страницах.

В этом случае, когда я ежедневно создаю индекс с новыми URL-адресами страниц, его создание файлов cfs, таких как _0.cfs, _1.cfs, _2.cfs и т. д., а также файл сегмента обновляются.

Меня тут ударили. Может ли кто-нибудь, пожалуйста, направить меня.