使用示例核心和架构在上载的Word文档中查询失败

时间:2014-03-28 07:35:05

标签: solr

简短版本:要成功查询使用示例核心上传的Word文档中的术语,我需要做什么? (编辑:最初的问题是“在上传的Word文档中搜索与制表符和换行符相邻的术语(即\ t,\ n)需要做什么?”但问题是与标签或换行没什么关系。

长版:

我正在使用Solr 4.6.1。我正在运行通过在java -jar start.jar目录中运行example启动的示例核心的未修改版本。正在使用的schema.xmlexample/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字段中有数百个制表符和换行符(即\tattr_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旁边的字词的查询成功。

我可以做什么,以便对标签或换行符旁边的字词进行查询是否成功?我必须更改文档的上传方式吗?或者改变搜索的执行方式?

1 个答案:

答案 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。这就是您的查询失败的原因。内容没有在字段文本中编入索引。

该怎么办?

  1. 使用字段查询内容是q=attr_content:yasmin或复制&#39; n&#39;粘贴样式http://localhost:8983/solr/collection1/select?q=attr_content%3Ayasmin&wt=json&indent=true中的索引。这是在本地传递一个文档我索引你发布的内容。

  2. 在schema.xml中添加复制指令。您在schema.xml中找到copyFields的整个块下方,您可以添加<copyField source="attr_content" dest="text" />,只会将内容字段添加到文本或<copyField source="attr_*" dest="text" />,这会添加所有其他动态attr_* }字段也。

  3. 更改发布文件作为索引的方式。您可以将参数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

  4. 代替http://localhost:8983/solr/update/extract?literal.id=yabba&uprefix=attr_&fmap.content=content&commit=true