0

我已经用字段索引了一个文件-

  1. 内容(类型:text_general,不可逆:false,索引:true,存储:true)
  2. 类别(类型:text_general,不可逆:false,索引:true,存储:true)
  3. 标题(类型:text_general,不可逆:false,索引:true,存储:true)

有一个包罗万象的copyfield -

来源:*,
目的地:_text_

现在,当我搜索Content字段时,查询 - Apple trade ,我得到 6057 个文档;

但是当我搜索交易 Apple 时,我得到了 5878 个文档。

但是,当在catch-all字段上执行相同的搜索时,两个查询(6057 文档)都会得到相同的结果。

我不理解这里的错误,因为我希望 solr 在Content字段上搜索时为两个查询提供相同的结果。

我在用-

  • LuceneQParser
  • 经典相似度

“内容”字段的两个查询:

  1. 苹果贸易

http://localhost:8983/solr/core_name/select?q=Content%3A%20Apple%20trade

  1. 交易苹果

http://localhost:8983/solr/core_name/select?q=Content%3A%20trade%20Apple

4

1 回答 1

1

根据您刚刚添加到您的问题的内容并假设 Lucene 查询解析器忽略您之后的空格:,查询是Content:trade <default search field>:Apple- 您没有同时搜索该Content字段中的第一个和第二个术语。

当您交换他们的位置时,您正在搜索Content:Apple <default search field>:trade.

默认搜索字段_text_在默认配置中。由于查询不同,您可以假设字段中有不同的内容(例如,未正确重新索引并在添加copyField指令后清除索引)。

如果您想使用可以轻松映射到用户输入的自由文本搜索,请改用 edismax 查询解析器 ( defType=edismax),在 中提供查询q=apple trade,并在 中提供字段名称qf=Content

于 2020-01-07T14:39:33.150 回答