0
头像

返回意外结果的 DatabaseService 查询

我似乎遇到了 DatabaseService 插件实用程序返回意外结果的问题。  我正在开发一个插件,该插件从包含本地数据库中 DNA 分子名称列表的 CSV 文件中进行导入,并对这些文档执行操作。  该操作在所有情况下都能正常工作,但 DatabaseService 并不总是返回正确的 AnnottatedPluginDocument。

因此,如果 CSV 包含以下分子名称:

1   HIS-TMV-XYZ1(1-159)-abc

2   HIS-TMV-XYZ1(1-159)-cde

3   HIS-TMV-XYZ1(1-159)-fgh

4   HIS-TMV-XYZ1(1-159)-bhi

并且 molName = 列表中的第一个分子名称。

我的查询是:

Query[] searchValues1 = new Query[] {Query.Factory.createFieldQuery(DocumentField.ALL, Condition.CONTAINS, molName)

DatabaseService service = (DatabaseService)PluginUtilities.getGeneiousService("LocalDocuments");

列表<AnnotatedPluginDocument>文件1;

文档 1 = service.retrieve(totalQuery,listening);

 

文档 1 列表返回以下命中:

2   HIS-TMV-XYZ1(1-159)-cde

3   HIS-TMV-XYZ1(1-159)-fgh

4   HIS-TMV-XYZ1(1-159)-bhi

如果我将 molName 更改为第二个分子,则文档 1 列表包含:

1   HIS-TMV-XYZ1(1-159)-abc

3   HIS-TMV-XYZ1(1-159)-fgh

4   HIS-TMV-XYZ1(1-159)-bhi

 

根据分子名称的长度,似乎确实与发生有关。  大约少于 35 个字符的名称会给出预期的结果,而较长的名称会给出不正确的结果。  如果我尝试修剪分子名称,有时会根据最后修剪的字符是否为特殊字符而抛出错误。

 

任何想法将不胜感激。

 

布赖恩

 

 

布赖恩·卡彭特

2 条评论

0
头像

问题解决了。

似乎是在 Query 中处理 molName 的方式导致了问题。  分子名称需要在双引号内才能正确处理,否则 Lucene queryParser 会出现问题。

所以 

Query[] searchValues1 = new Query[] {Query.Factory.createFieldQuery(DocumentField.ALL, Condition.CONTAINS, "\"" + molName + "\"")

布赖恩·卡彭特 0 票
评论动作 永久链接
0
头像

嗨,布莱恩,

很高兴听到您发现并解决了问题:)

马修·张 0 票
评论动作 永久链接