Lucene.net 4.8:按facet字段搜索

时间:2017-12-12 21:00:17

标签: lucene.net faceted-search

我正在尝试在lucene.net中编写一个过滤器,该过滤器匹配从一组标签中至少有一个标签的所有博客帖子。

我正在尝试以下操作,但这总是会返回0结果:

           var bq = new BooleanQuery();

            var termsQuery = new BooleanQuery();
            foreach (var tag in tags)
            {
                termsQuery.Add(new TermQuery(new Term("TagSlugs", tag)), Occur.SHOULD);
            }
            bq.Add(termsQuery, Occur.MUST);

            var hits = searcher.Search(bq, page * pageSize);

我做错了什么?

我的文档如下:

        var doc = new Document
        {
            new StoredField("Id", blogPost.Id),
            new Int32Field("ModuleId", blogPost.ModuleId, Field.Store.YES),
            new TextField("Title", blogPost.Title, Field.Store.YES),
            new StringField("Slug", blogPost.Slug, Field.Store.YES),
            new StoredField("ImagePath", blogPost.ImagePath),
            new TextField("Intro", blogPost.Intro, Field.Store.YES),
            new TextField("Html", blogPost.Title, Field.Store.YES),
            new Int64Field("PublishDate", blogPost.PublishDate.Ticks, Field.Store.YES),
            new FacetField("PublishDateTag", blogPost.PublishDate.Year.ToString(), blogPost.PublishDate.Month.ToString(), blogPost.PublishDate.Year.ToString())
        };

        foreach (var tag in blogPost.TagObjects)
        {
            doc.Add(new FacetField("Tags", tag.Name));
            doc.Add(new FacetField("TagSlugs", tag.Slug));
        }

1 个答案:

答案 0 :(得分:0)

在这种特定情况下,您无需使用Facet,您可以使用简单的String字段并以此进行过滤。

但是,如果您想使用Facets,请尝试阅读此演示https://lucene.apache.org/core/4_8_0/demo/org/apache/lucene/demo/facet/SimpleFacetsExample.html

它是用Java语言编写的,但如果您是C#开发人员,则可读。