Lucene 为什么我不能搜索“a”;0“;索尔球场?
从schema.xml: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绑定到“整数”字段类型的类是什么?它
<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版本。