简短版本:要成功查询使用示例核心上传的Word文档中的术语,我需要做什么? (编辑:最初的问题是“在上传的Word文档中搜索与制表符和换行符相邻的术语(即\ t,\ n)需要做什么?”但问题是与标签或换行没什么关系。
长版:
我正在使用Solr 4.6.1。我正在运行通过在java -jar start.jar
目录中运行example
启动的示例核心的未修改版本。正在使用的schema.xml
是example/solr/collection1/conf/schema.xml
并且未经修改(它是随分发下载的那个),所以除非有人说它有用,否则我不会发布它。
使用http://localhost:8983/solr/update/extract?literal.id=yabba&uprefix=attr_&fmap.content=attr_content&commit=true
命令将Word文档上传到Solr后,\n
字段中有数百个制表符和换行符(即\t
和attr_content
)。如果字符串在文档中只出现一次,并且与其中一个字符相邻,则对该术语的查询不会成功。
一个具体示例是上传的Word文档,上传后的attr_content
字段中包含“Vorname:\ t \ t \ t \ tYasmin”。原始文档包含“Vorname:”,然后是两个制表符,然后是“Yasmin”(字符串“\ t”未出现在文档中)。字符串“Yasmin”仅出现在文档中的该位置。
当我使用查询http://127.0.0.1:8983/solr/collection1/select?q=Yasmin&wt=json&indent=true
查询“Yasmin”时,我没有得到任何结果。对\t
或\n
旁边不的字词的查询成功。
我可以做什么,以便对标签或换行符旁边的字词进行查询是否成功?我必须更改文档的上传方式吗?或者改变搜索的执行方式?
答案 0 :(得分:1)
简短版
您正在索引未搜索但未复制到名为text
的默认搜索字段的字段中的内容。
长版
首先,您要将文件的实际内容映射到动态字段。在示例的schema.xml中,您将找到行
<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
这是您的内容最初的地方。填充时,该字段将被称为attr_content
,当您使用fmap.content=attr_content
发布文件内容时,就像这样命名。但是你的查询是针对哪些字段的?
因此,您需要查看solrconfig.xml of collection1
。你可以在中间看到:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</lst>
</requestHandler>
好的,所以默认字段(df)是text
。在索引时,这不是您的内容所在。但是这可能是schema.xml中的<copyfield>
所涵盖的?我们来看看:
<copyField source="cat" dest="text"/>
<copyField source="name" dest="text"/>
<copyField source="manu" dest="text"/>
<copyField source="features" dest="text"/>
<copyField source="includes" dest="text"/>
<copyField source="manu" dest="manu_exact"/>
<copyField source="price" dest="price_c"/>
<copyField source="title" dest="text"/>
<copyField source="author" dest="text"/>
<copyField source="description" dest="text"/>
<copyField source="keywords" dest="text"/>
<copyField source="content" dest="text"/>
<copyField source="content_type" dest="text"/>
<copyField source="resourcename" dest="text"/>
<copyField source="url" dest="text"/>
<copyField source="author" dest="author_s"/>
不。 attr_content
未复制到text
。这就是您的查询失败的原因。内容没有在字段文本中编入索引。
该怎么办?
使用字段查询内容是q=attr_content:yasmin
或复制&#39; n&#39;粘贴样式http://localhost:8983/solr/collection1/select?q=attr_content%3Ayasmin&wt=json&indent=true
中的索引。这是在本地传递一个文档我索引你发布的内容。
在schema.xml中添加复制指令。您在schema.xml中找到copyFields
的整个块下方,您可以添加<copyField source="attr_content" dest="text" />
,只会将内容字段添加到文本或<copyField source="attr_*" dest="text" />
,这会添加所有其他动态attr_*
}字段也。
更改发布文件作为索引的方式。您可以将参数fmap.content=attr_content
更改为fmap.content=content
。然后,文件的内容将存储在字段content
中,该字段已经具有到字段text
的复制指令。因此,使用http://localhost:8983/solr/update/extract?literal.id=yabba&uprefix=attr_&fmap.content=attr_content&commit=true
http://localhost:8983/solr/update/extract?literal.id=yabba&uprefix=attr_&fmap.content=content&commit=true
醇>