如何对Solr进行简单查询?

cygmwpex  于 5个月前  发布在  Solr
关注(0)|答案(1)|浏览(55)

TL;DR

我不能在Solr中进行最简单的查询,比如在文档列表(例如书籍)中搜索单词game
我在学习here的教程,但我觉得它们有点过时了。我在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 run

然后运行docker:

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


我检查它的工作通过去http://localhost:8983,我看到管理面板.如果我去核心列表,我看到它空,这是正常的:
x1c 0d1x的数据

3.创建示例核

我从命令行创建了一个名为sample_core的核心:

$ docker exec solr-test solr create_core -c sample_core


我看到通过进入管理面板并刷新创建的核心。它的数据显示出来,并且它也出现在要选择使用它的文件夹中:


4.加载示例数据

在docker中加载示例数据并发出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 = text:* 它也可以工作。

6.尝试查询词条(FAILS失败)️

当我在前端搜索单词game时,结果是一个空列表。我希望Solr至少返回“权力的游戏”这本书,不是吗?



如果我直接在浏览器中更改查询字符串,也会发生这种情况:http://localhost:8983/solr/sample_core/select?q = game
然而,根据文档,它应该工作:
x1c4d 1x的

问题

我应该怎么做才能有一个简单的docker设置单节点,在那里我加载了一吨文档,我想在任何字段上搜索模糊文本?

mzillmmw

mzillmmw1#

当你只使用game本身时,你会在任何被定义为默认搜索字段的字段中搜索--这可能不是你想的字段。一些(示例)模式有copyField指令,它会将每个提交的字段复制到一个名为_text_的公共字段中,然后将该字段用作默认搜索字段。
但是,如果没有该指令,或者默认搜索字段(标准查询解析器的dfedismaxqf)被设置为另一个字段,则不会得到任何命中。
要搜索特定字段,您可以在查询前添加字段名称:

q=name:game

字符串
这将搜索文本(或者更确切地说,文本生成的标记)name字段中的game。如果您包含的字段被定义为公共text_en字段,则应该会命中。如果不是,使用管理界面下的Analysis页面来查看在索引和查询时如何处理文本-相同的令牌需要同时出现在两边才能发生袭击。
您还可以使用edismax查询处理程序来获取更常见的用户搜索查询行为:

q=game&qf=name


..说Solr应该尝试在字段name中匹配game(qf => query fields)。您可以包含多个字段,例如qf=name author,并且您可以优先考虑如何对它们进行评分:qf=name^10 authorname中的点击率将比在author中高出十倍(即name中的命中得分将乘以10 -然而,name中的命中可能更常见,导致总得分较低。您可以附加debug=all以查看确切的得分信息)。

相关问题