我有一个Lucene Index设置,我可以很好地查询。我只是无法获得"字段不等于空字符串"条件。例如,在以下代码样品中,我想有3个条件
- 其中" country tag"字段包含" {4ed2f7ee-5C2A-418C-B2F6-236F94166BA1}"。
- 其中"乡村标签"字段不是空字符串。
-
其中"日期"范围在" 20110101T000000"one_answers" 20121001T000000"之间。
WildcardQuery taggingQuery = new WildcardQuery(new Term("country tag", "*" + ShortID.Encode("{4ED2F7EE-5C2A-418C-B2F6-236F94166BA1}").ToLowerInvariant() + "*")); TermQuery taggingNotQuery = new Term("country tag", " ")); RangeQuery rangeQuery = new RangeQuery(new Term("date", "20110101T000000"), new Term("date", "20121001T000000"), true); BooleanQuery booleanQuery = new BooleanQuery(); booleanQuery.Add(taggingQuery, BooleanClause.Occur.MUST); booleanQuery.Add(taggingNotQuery, BooleanClause.Occur.MUST_NOT); booleanQuery.Add(rangeQuery, BooleanClause.Occur.MUST);
我感觉自己做错了,或者我的查询以某种方式是错误的。我不需要一个条件,我不得不寻找空的或空字段。
任何帮助都将受到赞赏!
如果允许'*'作为搜索字符串中的第一个字符,Lucene可以使用诸如" countryTag:*"之类的查询来查找所有包含 countryTag中任何内容的文档/strong>字段。(Lucene的默认值是在查询字符串中禁用初始'*'。)
我在设置索引时应该更加注意。我忘了为每个字段添加现场分析仪。多语言领域通过不同的分析仪而不是标准分析仪进行了索引。我将其添加到我的配置部分以进行现场爬网,我的查询开始工作
<fieldTypes hint="raw:AddFieldTypes">
<!-- Text fields need to be tokenized -->
<fieldType name="single-line text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="multi-line text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="word document" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="html" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="rich text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="memo" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="text" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<!-- Multilist based fields need to be tokenized to support search of multiple values -->
<fieldType name="multilist" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="treelist" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="treelistex" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="checklist" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<!-- Legacy tree list field from ver. 5.3 -->
<fieldType name="tree list" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
</fieldTypes>