java - 强制 Solr 在搜索期间不使用 _version_ 字段

标签 java solr lucene full-text-search

我的 schema.xml 中有一个 _version_ 字段的默认声明:

<field name="_version_" type="long" indexed="true" stored="true"
   multiValued="false"/>

我读到该字段仅由 Solr 内部管理以进行并发管理,但是当我搜索“002219”作为返回时,我得到:

"docs": [  
  {  
        "person_street_t": [  
          "<streetName>",  
        ],  
        "id": "123",  
        "person_abbr_t": [  
          "<sb>"  
        ],  
        "person_name_t": [  
          "<sb>"  
        ],  
        "person_city_t": [  
          "<city>"  
        ],  
        "person_zipcode_s": "<zipcode>",  
        "type_s": "PERSON",  
        "person_house_number_s": "<hn>",  
        "_version_": 1494523490022195200  
                            //****** <- matched by Solr
   }  
 ]  

但我不希望 Solr 搜索该字段。 这是正常行为吗?难道我做错了什么?或者是否有其他方法可以禁用 _version_ 字段中的搜索?

更新:

好吧,我读了一下,发现这个字段(_text)是defaultSearchField。所以我现在所做的是更改默认值:

<copyField source="*" dest="_text"/>

至:

  <copyField source="*_t" dest="_text"/>
  <copyField source="*_s" dest="_text"/>
  <copyField source="*_ts" dest="_text"/>
  <copyField source="*_ss" dest="_text"/>

这些是我正在索引的唯一字段类型(*_ts 是我添加的)。够了吗?

最佳答案

如果您使用示例架构,您很可能定义了 copyField,将所有内容复制到单个 文本 字段(在 schema.xml 中定义)并搜索该字段(在 solrconfig.xml 中定义)。

这对开发很有好处,但所有内容都只是以文本形式搜索,可能不是您想要做的事情。

您可以考虑切换到 eDisMax 之类的东西。或者,如果您还没有完全准备好,您可以定义更严格的 copyField 规则以仅聚合您想要的字段。

关于java - 强制 Solr 在搜索期间不使用 _version_ 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816557/

相关文章:

java - SolrHealthIndicator 不带已弃用的 CompositeHealthIndicator

Solr 在突出显示存储的 html 字段时剥离 html

php - 在 lucene 中存储用户数据或查询 rdbms?

azure - 使用 Solr 在 Azure VM 上构建专用搜索服务器

lucene - org.apache.lucene.queryParser.ParseException

java - Lucene 地理距离排序性能

java - OnTouch 返回 "false"但触摸事件未传递到基础 View

java - 在二维数组中生成唯一的行和列

java - 正则表达式匹配字符串内的文本,并删除尾随换行符

java - 是否可以通过 bean 设置 Spring Boot 应用程序的属性?