如何用2个值过滤Lucene搜索字段?
问题描述:
我有一个lucene搜索,我试图用LanguageIds过滤搜索,但我无法做到这一点。我传递的是我的语言类似“1,2,3”,但它没有正确过滤,它唯一的取值为languageIds“1,2,3”。但我希望结果具有“1”,“1,2”,“1,3”,“1,2,3”的languageIds。任何机构可以告诉我如何在Lucene.net中为单个termQuery传递多个值?如何用2个值过滤Lucene搜索字段?
笏到目前为止,我所做的就是
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);
}
答
你可以尝试多次添加相同的字段建立索引时像
doc.Add(new Field(resourceLanguageId,"1"...
doc.Add(new Field(resourceLanguageId,"2"...
doc.Add(new Field(resourceLanguageId,"3"...
是否有其他方法从搜索方面来筛选未做任何索引的变化? – 2011-06-09 08:54:01
尝试搜索“1”和“1,*”,具体取决于您存储该字段的方式。这不是最好的解决方案,你应该遵循Anon的建议 – KinSlayerUY 2013-04-15 13:34:33