在SOLR中搜索多个字段
我正在尝试搜索 2 个字段,而无需在查询中指定字段名称。在我的 schema.xml 中,我添加了 2 个字段,对应于数据库表中的 2 列。
<field name="title" type="string" indexed="true" stored="true" required="true"/>
<field name="description" type="string" indexed="true" stored="true"/>
此外,我添加了第三个字段,我想将其用作“copyField”中的目的地
也作为“defaultSearchField”
<field name="combinedSearch" type="string" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="combinedSearch"/>
<uniqueKey>title</uniqueKey>
<defaultSearchField>combinedSearch</defaultSearchField>
现在在 Solr 管理 UI 中,如果我输入一些标题,它将返回结果,但如果我输入一些描述,它不会返回任何内容。 似乎只有第一个字段用于搜索。我是否以正确的方式使用 copyField 和 defaultSearchField ? 我已重新启动 solr 服务器并重新生成索引。 谢谢。
I am trying to search on 2 fields without having to specify a field name in the query. In my schema.xml I have added 2 fields that correspond to 2 columns in a database table.
<field name="title" type="string" indexed="true" stored="true" required="true"/>
<field name="description" type="string" indexed="true" stored="true"/>
In addition I added a 3rd field which I want to use as a destination in "copyField"
and also as the "defaultSearchField"
<field name="combinedSearch" type="string" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="combinedSearch"/>
<uniqueKey>title</uniqueKey>
<defaultSearchField>combinedSearch</defaultSearchField>
Now in the Solr Admin UI, if I enter some title it will return results but if I enter some description it won't return anything.
It seems only the first field is used for searching. Am I using copyField and defaultSearchField in the right way?
I've restarted the solr server and regenerated the index.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可能它以相同的结果结束,但为了您的信息,我在 schema.xml 的末尾使用 copyField (但我不认为顺序是相关的),语法如下:
next:
If
type="text "
是更好的选择取决于“字符串”的定义。如果您使用默认的 fieldTypes,type="string"
可能更适合您的情况,因为对于string
默认情况下没有分析,这意味着(可能)还有没有标记化。//update
另一种替代复制字段的方法是使用 (e)dsimax 查询解析器。在 solrconfig.xml 上,您可以指定默认情况下要搜索的所有字段,如下所示:
Probably it ends in the same result, but for your information, i use copyField at the end of the schema.xml (but i dont think, the order is relevant) in the following syntax:
next:
If
type="text"
is the better choise depends on the definition of "string". If you are using default fieldTypes,type="string"
could better for your case, because forstring
there is no analyzing per default, which means (probably) there is also no tokenyzing.//update
An other way instead of copyfields is to use the (e)dsimax query parser. On
solrconfig.xml
you can specify all the field you like to search by default, like this:尝试将您的
combinedSearch
类型更改为text
,然后重新生成索引。Try change your
combinedSearch
type totext
and then regenerate the index.我是这样处理的。我没有使用 * 别名,而是定义了要复制到组合字段的字段。我还在我的正常字段(标题和描述)上将 multiValued 设置为 false。我没有将字段定义为字符串,而是使用“text_general” - 既用于普通字段又用于组合字段。
此外,我在组合字段上设置了“stored=false”,因为我不需要返回该值,因为它仅用于搜索 - 至少在我的情况下是这样。
Here's how I approached it. Instead of using * alias, I defined which fields to copy to my combined field. I also sat multiValued to false on my normal fields (title and description). Instead of defining my fields as string, I used "text_general" - both for my normal fields and my combined field.
Furthermore I set "stored=false" on my combined field, as I don't need to return the value, as it is only used for searching - in my case at least.