我是索尔的新人。我使用Oracle数据库尝试过DataImport。数据已成功导入。当我尝试使用查询进行搜索时:
QT =标准 Q = *
我得到了很好的结果。但是当我进行特定搜索时,结果为空,显示没有文档。记录器为空,并且没有显示错误。
答案 0 :(得分:1)
确定!我知道了。
我观察到当我使用schema.xml的一些预定义字段时,对这些字段的搜索工作正常。但是当我定义了自己的某些字段时,结果仍然没什么。
然后我查看了“solr-config.xml”“/ select”请求处理程序。有一行
<str name="df">text</str>
表示“txt”是唯一可搜索的字段。但那么它如何搜索其他领域呢?
答案在于“schema.xml's”
"<copyField>"
标签。默认情况下存在的字段将复制到“文本”中,这使它们可搜索。因此,如果您希望定义的字段是可搜索的,只需定义您的字段并将其添加到copyField标记中即可。 ;)
答案 1 :(得分:1)
TLDR版本:将您的字段定义为type="text"
以开始。如果您有一个名为“产品”的字段,请将<field name="product" type="text" indexed="true" stored="true" />
添加到schema.xml
标记内的默认<fields>
,您应该完成。要使用select
请求处理程序进行搜索,请使用q=<field_name>:<text_to_look_for>
或q=*:*
来显示所有文档。
你在这里犯了一些错误。我将使用'select'请求处理程序进行解释。
查询格式为?q=<field_name>:<text_to_look_for>
。因此,如果您想要返回与所有字段匹配的所有值,您可以说q=*:*
如果您在“产品”字段中查找“iPod”一词,您的查询将为q=product:iPod
要记住的另一件事是,如果在schema.xml
中,如果您将字段product
指定为映射到type="string"
的{{1}},则查询({{ 1}})应该与索引中的值精确匹配,因为Solr默认情况下不会对StrField进行标记,即如果索引将其保存为class="solr.StrField"
,<text_to_look_for>
将不会返回结果。如果您需要它仍然返回它,您可以使用ipod
中的iPod
(fieldType定义已存在于默认schema.xml中。)“text”fieldType有几个分析器(一个分析器)忽略大小写)和tokenizers(tokenizer将字段中的单词拆分并对其进行索引,以便在搜索特定单词时说“ipod”,它将匹配“iPod 16GB White”的值。)
关于您自己的答案,type="text"
指定要搜索的默认字段,即,如果您只是说schema.xml
,则会在此字段中查找。此字段称为文本的目标是保存文档中的所有其他字段,以便您可以在此字段中搜索并知道此文档中的某个或其他字段将与您的查询匹配,因此您不需要如果您不知道您希望该值在哪个字段,请在特定字段中搜索。