lucene中的多条件查询问题?

020job 2008-07-23 08:53:32
版本lucene.net 1.43

BooleanQuery m_BooleanQuery = new BooleanQuery();
query = MultiFieldQueryParser.Parse(guanjianzi,new String[] {"name"},new ChineseAnalyzer());
m_BooleanQuery.Add(query, true, false);
m_BooleanQuery.Add(new TermQuery(new Term("city1", id1)), true, false);
hits = searcher.Search(m_BooleanQuery,sort);

我用Term("city1", "1 2")) 试了没有用

以上的只能实现id1匹配一个city1,我想叫他同时查看city2,city3.
city1存储的时候是用得Keyword,本来是int类型的
city1和city2,city3之间是or的关系,
就是(city or city2 or city3) and name

谁能给出比较详细的答案?
...全文
366 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoulinli915 2012-10-13
  • 打赏
  • 举报
回复
我回答的是.net的,java的不了解,机理相同,
zhoulinli915 2012-10-13
  • 打赏
  • 举报
回复
MultiFieldQueryParser 和BooleanQuery一起使用不太好用,BooleanQuery有时候是查询不到的,但用Nluck可以找到,
sxmonsy 2008-07-28
  • 打赏
  • 举报
回复
不明白
amingo 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq61990988 的回复:]
由于当前的页面和首页不对称,又不够人性化,所以需要版本更新
要求:静态页面
技术:js,div+css
http://www.oddel.com/login.html?username=username&password=password
顺便推荐一下给大家,这是个web应用:http://www.oddel.com(偶得搜藏)

[/Quote]
wangxiao2008 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kbryant 的回复:]
友情帮顶
[/Quote]
zhemianshi 2008-07-28
  • 打赏
  • 举报
回复
帮顶!~~
onewxw_1 2008-07-28
  • 打赏
  • 举报
回复
升级到2.0 版本 http://d.download.csdn.net/down/431449/zry5354

可以用RangeQuery,很简单的。


RangeQuery用于查询范围,通常用于时间,还是来看例子:

namespace dotLucene.inAction.BasicSearch
{
public class RangeQueryTest : LiaTestCase
{
private Term begin, end;
[SetUp]
protected override void Init()
{
begin = new Term("pubmonth", "200004");

end = new Term("pubmonth", "200206");
base.Init();
}


[Test]
public void Inclusive()
{
RangeQuery query = new RangeQuery(begin, end, true);
IndexSearcher searcher = new IndexSearcher(directory);


Hits hits = searcher.Search(query);
Assert.AreEqual(1, hits.Length());
}
[Test]
public void Exclusive()
{
RangeQuery query = new RangeQuery(begin, end, false);
IndexSearcher searcher = new IndexSearcher(directory);


Hits hits = searcher.Search(query);
Assert.AreEqual(0, hits.Length());
}

}
}


RangeQuery的第三个参数用于表示是否包含该起止日期.

RangeQuery和QueryParse

[Test]
public void TestQueryParser()
{
Query query = QueryParser.Parse("pubmonth:[200004 TO 200206]", "subject", new SimpleAnalyzer());
Assert.IsTrue(query is RangeQuery);
IndexSearcher searcher = new IndexSearcher(directory);
Hits hits = searcher.Search(query);

query = QueryParser.Parse("{200004 TO 200206}", "pubmonth", new SimpleAnalyzer());
hits = searcher.Search(query);
Assert.AreEqual(0, hits.Length(), "JDwA in 200206");
}

Lucene用[] 和{}分别表示包含和不包含.



qq61990988 2008-07-24
  • 打赏
  • 举报
回复
由于当前的页面和首页不对称,又不够人性化,所以需要版本更新
要求:静态页面
技术:js,div+css
http://www.oddel.com/login.html?username=username&password=password
顺便推荐一下给大家,这是个web应用:http://www.oddel.com(偶得搜藏)
kbryant 2008-07-24
  • 打赏
  • 举报
回复
友情帮顶
yilanwuyu123 2008-07-24
  • 打赏
  • 举报
回复
没接触 UP。
viki117 2008-07-24
  • 打赏
  • 举报
回复
BooleanQuery 是什么东西啊?
qyulang 2008-07-24
  • 打赏
  • 举报
回复
mark

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧