Lucene 为什么我不能搜索“a”;0“;索尔球场?

Lucene 为什么我不能搜索“a”;0“;索尔球场?,lucene,solr,Lucene,Solr,从schema.xml: <field name="myfield" type="integer" indexed="true" stored="false"/> id为5的记录具有值为0的myfield,我通过搜索普通id:5并查看objectXml确认了这一点 搜索id:5和myfield:0不会返回任何记录 但是,搜索id:5和-myfield:1会返回我所期望的记录 为什么? -- 其他信息: 整数类型的定义: Solr版本:1.4绑定到“整数”字段类型的类是什么?它

从schema.xml:

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

id为5的记录具有值为0的
myfield
,我通过搜索普通
id:5
并查看objectXml确认了这一点

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

但是,搜索id:5和-myfield:1会返回我所期望的记录

为什么?

-- 其他信息:

整数类型的定义:


Solr版本:1.4

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


该文档上的索引数据在管理中是什么样子的?

数字字段需要数字查询。尝试为您的字段提供一种非数字的类型。

我尝试了您的案例,假设您使用int的标准字段类型:

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

那很好。所以我猜
integer
的字段类型定义在某种程度上是错误的。检查这个定义。

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

问题是,供应商的代码在对其编制索引之前正在验证要编制索引的值是否为false。不幸的是,他们是这样做的:

$value = strval($node);
if ($value)
当然,0的计算结果为false,即使它是字符串“0”

我把它改成:

$value = strval($node);
if ($value !== false)
。。。现在它开始工作了


感谢您的努力,很抱歉,问题最终完全无关。

整个查询是id:5和myfield:0。我不想返回我的字段。我正在按id和myfield搜索。FWIW,如果我使用myfield:1搜索其他内容,它会返回结果。它似乎不喜欢myfield:0。0什么时候不再是数字了?。。。?当您指定numeric的字段类型时,这意味着您希望以某种精度将其存储为trie。这意味着您的号码没有逐字索引;因此,您需要一种特殊类型的查询来查询它(本质上是一种范围查询变体)。“数字查询”并不意味着“一个包含数字的普通查询”,它指的是一个特殊的Lucene类。谢谢你的解释,但它并没有真正帮助我。我有一个整型字段。如果我搜索“myfield:”,我会找到我要找的东西。如果我搜索“myfield:0”,我将一无所获。你是说我需要一种特殊类型的查询-好的,你能给我一个例子吗?模式片段与你的描述不匹配-你不能通过查看结果来验证非存储字段的值。请验证它是否与您的实际架构匹配。另外,请包含整数类型的定义,并指定正在运行的Solr版本。