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设置单节点,在那里我加载了一吨文档,我想在任何字段上搜索模糊文本?
1条答案
按热度按时间mzillmmw1#
当你只使用
game
本身时,你会在任何被定义为默认搜索字段的字段中搜索--这可能不是你想的字段。一些(示例)模式有copyField
指令,它会将每个提交的字段复制到一个名为_text_
的公共字段中,然后将该字段用作默认搜索字段。但是,如果没有该指令,或者默认搜索字段(标准查询解析器的
df
或edismax
的qf
)被设置为另一个字段,则不会得到任何命中。要搜索特定字段,您可以在查询前添加字段名称:
字符串
这将搜索文本(或者更确切地说,文本生成的标记)
name
字段中的game
。如果您包含的字段被定义为公共text_en
字段,则应该会命中。如果不是,使用管理界面下的Analysis
页面来查看在索引和查询时如何处理文本-相同的令牌需要同时出现在两边才能发生袭击。您还可以使用
edismax
查询处理程序来获取更常见的用户搜索查询行为:型
..说Solr应该尝试在字段
name
中匹配game
(qf => query fields)。您可以包含多个字段,例如qf=name author
,并且您可以优先考虑如何对它们进行评分:qf=name^10 author
在name
中的点击率将比在author中高出十倍(即name
中的命中得分将乘以10 -然而,name
中的命中可能更常见,导致总得分较低。您可以附加debug=all
以查看确切的得分信息)。