我正在使用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 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”filedType,我已将其定义如下:
<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可能没有任何意义,因为我尝试了很多。
字段可以包含以下值:
标题 - 可以包含任何内容 在 - 女孩的房间,单身公寓,辅助宿舍 rt - 1分享,3分享,单座 st - 1 BHK,3 BHK
现在,如果我在“roselum city”中查询“1 BHK flat”,我希望结果只有st为“1 BHK”,其他结果包含标题中的关键字。
但是我也得到了rt =“1 sharing”的结果,并且结果是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 或 字段中所有关键字的结果。 title 字段是一个例外,如果查询中的任何一个关键字与title关键字匹配,则应返回该结果。
请不要将其标记为重复。我经常搜索它。
答案 0 :(得分:0)
这里有一堆问题:
我建议先退后一步做一些练习/教程。您最有可能希望将eDismax与字段列表一起使用,mm = 100%。而且没有copyText。