【发布时间】:2021-02-14 19:27:05
【问题描述】:
我是 solr 搜索查询的初学者,我试图获得给定术语的准确结果。对于包含多个单词的术语,我得到了准确的结果。但是对于只有一个词的术语,我没有得到准确的搜索结果。在否决或关闭此问题之前,请考虑该场景。我要求精确搜索单个单词。
例如
-
如果我搜索“要添加的船舶” 我得到结果ship to address
-
植物:我得到植物编号、植物类型、植物描述等结果,然后是 植物 我希望我的确切词植物首先出现,然后我希望其他相关搜索出现
我尝试过的方法
/query?q=(name:"PLant")&stopwords=true //giving output I mentiond above
/query?q=(name:"^PLant$")&stopwords=true //not giving any output
/query?q="PLant"&stopwords=true //giving fuzzy output
任何帮助将不胜感激。
【问题讨论】:
-
命中将由您的字段的分析链确定 - 该链可能是一个有损过程,因此如果您实际上没有存储确切的令牌,您将无法进行准确的匹配。您不能直接查询存储的文本。您可以添加第二个字段,然后使用
copyField将相同的内容复制到该字段中,然后使用该字段来提升那些具有完全匹配的内容。此外,默认行为是内容较短(即令牌较少)的字段将略微提升,但这也取决于您对该字段的设置。 -
那么您能否为 aboce 场景添加一个演示查询,因为我对 solr 几乎没有任何经验
-
您必须添加您正在使用的字段的定义以及您如何查询它 - 在您的第三个示例中,您没有字段名称,因此它将使用定义为默认搜索字段的任何内容(通常为
_text_)。如果您使用默认的text字段,您将获得您提到的点击。但是由于您还说您不能编辑架构,所以我不确定您将能够更改什么(您可以更改字段名称吗?添加字段?更改字段的类型?)。 -
OK 我是如何改变架构
<field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />这样的,但结果是一样的 -
像第一次一样再次将您的内容提交给 Solr。发出 deleteByQuery(Web 管理界面应该让您选择直接执行 IIRC)以在必要时首先删除所有文档。
标签: search solr full-text-search search-engine