如何对 Solr 进行简单查询?

问题描述 投票:0回答:1

TL;博士

我无法在 Solr 中进行最简单的查询,例如在文档列表(例如书籍)中搜索单词

game

我正在关注这里的教程,但我认为它们有点过时了。我是在docker中做的。

我的设置,在 docker 中

1.设置数据目录

首先,我通过创建一个空目录并使其

777
来准备存储,以避免任何权限问题:

$ mkdir solrdata         # To make a storage that I can inspect
$ chmod 777 solrdata     # Because I'm user 1000 and the docker runs with user 8983

2.码头运行

然后我运行docker:

$ docker run --rm -d -v ${PWD}/solrdata:/var/solr -p 8983:8983 --name solr-test solr

我通过访问 http://localhost:8983 检查它是否有效,然后我看到了管理面板。如果我转到核心列表,我会看到它是空的,这是正常的:

3.创建示例核心

我通过从命令行执行此操作来创建一个名为

sample_core
的核心:

$ docker exec solr-test solr create_core -c sample_core

我看到通过进入管理面板并刷新创建的核心。显示其数据,并且它也出现在下拉列表中以供选择使用它:

4.加载样本数据

要加载示例数据,我在 docker 中进行 bash 操作以发出

bin/post
命令:

host$ docker exec -it solr-test bash
container$ bin/post -c sample_core example/exampledocs/*

5.检查数据是否已加载

如果我进入管理面板,选择核心

sample_core
并发出一个空查询(即:
q=*:*
),我会看到存储了文档,例如“权力的游戏”一书等:

如果我在浏览器中加载原始查询,如下所示:http://localhost:8983/solr/sample_core/select?q=*:* 它也有效。

6.尝试查询一个术语(失败⚠️❌)

当我在前端搜索单词

game
时,结果是一个空列表。我希望 Solr“至少”归还《权力的游戏》这本书,不是吗?

如果我直接在浏览器中更改查询字符串,也会发生这种情况:http://localhost:8983/solr/sample_core/select?q=game

尽管如此,根据文档它应该可以工作:

问题

我应该怎么做才能有一个简单的 docker 设置单节点,在其中加载大量文档,并且我想在任何字段上使用模糊文本搜索它们?

solr full-text-search
1个回答
0
投票

当您仅使用

game
本身时,您正在搜索定义为默认搜索字段的任何字段 - 这可能不是您正在考虑的字段。某些(示例)模式具有
copyField
指令,将每个提交的字段复制到名为
_text_
的公共字段中,然后使用该字段作为默认搜索字段。

但是,如果您没有该指令,或者默认搜索字段(标准查询解析器的

df
qf
edismax
)设置为另一个字段,您将不会获得任何命中。

要搜索特定字段,您可以在查询前加上字段名称前缀:

q=name:game

这将在

game
字段中搜索文本(或更准确地说,从文本中生成的标记)
name
。如果您包含的字段被定义为常见的
text_en
字段,那么您应该会受到欢迎。如果没有,请使用管理界面下的
Analysis
页面查看索引和查询时如何处理文本 - 两侧都需要存在相同的标记才能发生命中。

您还可以使用

edismax
查询处理程序来获取更常见的用户搜索查询行为:

q=game&qf=name

.. 表示 Solr 应该尝试匹配字段

game
中的
name
(qf => 查询字段)。您可以包含多个字段,即
qf=name author
,并且您可以优先考虑您希望他们如何评分:
qf=name^10 author
的命中率将比他们对作者的评分高十倍(即来自作者的评分)
name
中的命中将乘以 10 - 然而,
name
中的命中可能更常见,从而导致总体得分较低。您可以附加
name
查看准确的得分信息)。
    

© www.soinside.com 2019 - 2024. All rights reserved.