2010-09-28 104 views
3

从schema.xml中:为什么我不能在Solr中搜索“0”字段?

<field name="myfield" type="integer" indexed="true" stored="false"/> 

记录ID为5具有myfield为0值,我已经通过搜索平原id:5和看objectXml证实。

搜索id:5 AND myfield:0不会返回任何记录。

然而,搜索id:5 AND -myfield:1会返回我期待的记录。

为什么?

- 附加信息:

整数类型定义: <fieldType name="integer" class="solr.IntField" omitNorms="true"/>

Solr的版本:1.4

+1

模式代码段与您的描述不匹配 - 您无法通过查看结果来验证非存储字段的值。请确认它与您的实际模式相符。另外,请包含整数类型的定义,并指定您正在运行的是哪个Solr版本。 – 2010-10-05 13:21:42

回答

0

我已经解决了这个问题。这是应用程序核心(第三方CMS)中的一个错误,与Solr无关。

问题在于供应商的代码正在验证,以便在索引索引之前查看索引值是否为假。不幸的是,他们这样做是这样的:

$value = strval($node); 
if ($value) 

当然,即使它是字符串“0”,0的计算结果为false。

我把它改为:

$value = strval($node); 
if ($value !== false) 

...现在它的工作原理。

谢谢你的努力和抱歉,问题最终成为完全无关的事情。

1

什么是绑定到 “整数” 字段类型的类?它是否将0作为不索引的标记?

该文档中的索引数据在管理员中看起来如何?

+0

整个查询是id:5 AND myfield:0。我不想回到我的领地。我正在通过id和myfield进行搜索。 FWIW,如果我使用myfield搜索别的东西:1,它确实返回结果。它似乎不喜欢myfield:0。 – 2010-09-28 18:51:23

-1

数字字段需要数字查询。尝试给你的领域以外的其他类型的数字。

+2

0是什么时候停止成为数字? – 2010-09-28 21:38:07

+0

...?当你指定一个字段类型的数字时,这意味着你想以特定的精度将它存储为一个trie。这意味着你的电话号码不是逐字索引的;所以你需要一个特殊类型的查询来查询它(实质上它是一个范围查询变体)。 “数字查询”并不意味着“带有数字的普通查询”,它指的是一个特殊的Lucene类。 – Xodarap 2010-09-29 00:25:04

+0

感谢您的解释,但它并没有真正帮助我。我有一个整数的字段。如果我搜索“myfield:<0以外的任何整数”,我找到了我要查找的内容。如果我搜索“myfield:0”,我什么也得不到。你说我需要一种特殊类型的查询 - 好的,你能给我一个例子吗? – 2010-09-30 17:15:14

0

我想你的情况下,假设你使用的标准字段类型为INT:

<fieldtype name="integer" class="solr.TrieIntField" ... />

这工作正常。所以我猜想integer的字段类型定义在某种程度上是错误的。检查这个定义。

相关问题