【发布时间】:2014-07-13 12:20:52
【问题描述】:
我正在使用 solr 4.9.0 实现 solr 搜索。
我希望 solr 返回与我的所有查询关键字匹配的结果,而不仅仅是一个或几个。
在放弃示例之前让我先提出架构
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="title" type="text_general" indexed="true" stored="true" required="true"/>
<field name="at" type="string" indexed="true" stored="true" required="true"/>
<field name="rt" type="custom1" indexed="true" stored="true" required="true"/>
<field name="st" type="custom1" indexed="true" stored="true" required="true"/>
我对所有这些都有一个 copyField(如果这很重要的话)
<copyField source="id" dest="text"/>
<copyField source="title" dest="text"/>
<copyField source="at" dest="text"/>
<copyField source="rt" dest="text"/>
<copyField source="st" dest="text"/>
和“custom1”字段类型,我定义如下:
<fieldType name="custom1" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
fieldType 可能没有意义,因为我尝试了很多组合以获得我想要的结果。
这些字段可以具有以下值:
标题 - 可以包含任何内容 at - 女孩房间, 单身公寓, Co-aid 宿舍 rt - 1 共享,3 共享,单座 st - 1 BHK, 3 BHK
现在,如果我查询“roselum city 的 1 BHK flat”,我希望结果只有 st 为“1 BHK”,而其他结果包含 title 中的关键字。
但是我也得到了 rt = "1sharing" 的结果和 st = "3 BHK" 的结果,因为我的查询包含 1 和 BHK 并且它匹配包含其中任何一个的所有内容,即; “1”或“BHK”或查询中我不想要的任何其他关键字。
我搜索了相关问题并找到了一些有希望的答案,但没有一个有效:
这是我已经尝试过的:
1.Performing EXACT match on SOLR search
这个答案完全符合我的问题,但即使遵循每一步,我也无法做到。
2.我加了<solrQueryParser defaultOperator="AND"/>
到我的 schema.xml 以强制查询遵循 AND 规则,但它也不起作用。
3. 将<str name="mm">100%</str> 添加到我的“/query” requestHandler 中的 solrConfig.xml 以匹配 100% 的关键字,但这也让我感到绝望。
我想要的几乎等于 fredseagul(第一点)在他的问题中引用的内容。
任何可以详细说明整个事情的专家,请介入。
注意:我只想通过修改架构/任何其他配置来实现所有这些,不想进行复杂的查询。只有在 st 或 rt 或 at 字段中包含所有关键字的结果才应返回。 title字段是一个例外,如果查询中的任何一个关键字与title关键字匹配,则应返回该结果。
请不要将其标记为重复。我已经搜索了很多。
【问题讨论】:
标签: solr lucene keyword tokenize