如何用 2 个值过滤 Lucene 搜索?

发布于 2024-11-14 17:56:16 字数 1411 浏览 5 评论 0原文

我有一个 lucene 搜索,我试图用 LanguageIds 过滤我的搜索,但我无法做到这一点。我传递了像“1,2,3”这样的语言ID,但它没有正确过滤,它只接受具有语言ID“1,2,3”的值。但我希望结果的 languageId 为“1”、“1,2”、“1,3”、“1,2,3”。谁能告诉我如何在 Lucene.net 中为单个 termQuery 传递多个值?

到目前为止我所做的是

          if (languagelds.Contains(","))
            {
                List<String> languageld = languagelds.Trim().Split(',').ToList();
                languageld.ForEach(lid =>
                {
                    TermQuery languageQuery = new TermQuery(new Term("resourceLanguageIds", lid));
                    filterQuery.Add(languageQuery, BooleanClause.Occur.MUST);
                });
            }
            else
            {
                TermQuery languageQuery = new TermQuery(new Term("resourceLanguageIds", languagelds));
                filterQuery.Add(languageQuery, BooleanClause.Occur.MUST);
            }


        filterQuery.Add(productQuery, BooleanClause.Occur.MUST);
        Filter filter = new CachingWrapperFilter(new QueryWrapperFilter(filterQuery));
        TopScoreDocCollector collector = TopScoreDocCollector.create(100, true);
        Hits hits = null;
        if (sortField != "Rank")
        {
            hits = indexSearch.Search(searchQuery, filter, sort);
            indexSearch.SetDefaultFieldSortScoring(true, true);
        }
        else
        {
            hits = indexSearch.Search(searchQuery, filter);
        }

I have a lucene search where i was trying to filter my search with LanguageIds, but i was unable to do that. I was passing my Languageids like "1,2,3",but its not filtering correctly,its only taking values having languageIds "1,2,3". but i want results having languageIds with "1", "1,2", "1,3", "1,2,3". Can any body tell me how to pass multiple values for a single termQuery in Lucene.net?

Wat i have done so far is

          if (languagelds.Contains(","))
            {
                List<String> languageld = languagelds.Trim().Split(',').ToList();
                languageld.ForEach(lid =>
                {
                    TermQuery languageQuery = new TermQuery(new Term("resourceLanguageIds", lid));
                    filterQuery.Add(languageQuery, BooleanClause.Occur.MUST);
                });
            }
            else
            {
                TermQuery languageQuery = new TermQuery(new Term("resourceLanguageIds", languagelds));
                filterQuery.Add(languageQuery, BooleanClause.Occur.MUST);
            }


        filterQuery.Add(productQuery, BooleanClause.Occur.MUST);
        Filter filter = new CachingWrapperFilter(new QueryWrapperFilter(filterQuery));
        TopScoreDocCollector collector = TopScoreDocCollector.create(100, true);
        Hits hits = null;
        if (sortField != "Rank")
        {
            hits = indexSearch.Search(searchQuery, filter, sort);
            indexSearch.SetDefaultFieldSortScoring(true, true);
        }
        else
        {
            hits = indexSearch.Search(searchQuery, filter);
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哭泣的笑容 2024-11-21 17:56:16

您可以尝试在索引时多次添加相同的字段,例如

doc.Add( new Field(resourceLanguageId,"1"... 

doc.Add( new Field(resourceLanguageId,"2"...

doc.Add( new Field(resourceLanguageId,"3"...

you can try to add the same field multiple times while indexing like

doc.Add( new Field(resourceLanguageId,"1"... 

doc.Add( new Field(resourceLanguageId,"2"...

doc.Add( new Field(resourceLanguageId,"3"...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文