java - 搜索solr关键词“OR”、“AND”AND“会报错【Hybris集成solr】
问题描述
**搜索solr关键字“OR”、“AND”AND“会报错。我本地环境不错,但是STG和DEV都失败了,请问有什么解决办法。
通过在搜索条件前添加“\”来翻译搜索条件是可行的。还有其他解决方案吗?谢谢。
以下是错误日志:**
ERROR [hCSHTTP10] [SolrSearchRequestResponsePopulator] Exception while executing SOLR search
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | de.hybris.platform.solrfacetsearch.search.FacetSearchException: Error from server at http://10.246.88.191:8983/solr: org.apache.solr.search.SyntaxError: Cannot parse '(skus_string_mv:(OR^40.0 OR *OR*^20.0)) OR (code_string:(OR^40.0 OR *OR*^20.0)) OR (styleNumber_string:(OR^40.0 OR *OR*^20.0)) OR (collectionName_text_en_mv:(or^160.0 OR *or*^80.0)) OR (collectionName_text_zh_mv:(or^160.0 OR *or*^80.0)) OR (keywords_text_en:(or^240.0 OR *or*^120.0)) OR (keywords_text_zh:(or^240.0 OR *or*^120.0)) OR (name_text_en:(or^220.0 OR *or*^110.0)) OR (name_text_zh:(or^220.0 OR *or*^110.0)) OR (categoryName_text_en_mv:(or^200.0)) OR (categoryName_text_zh_mv:(or^200.0)) OR (category_string_mv:(or^160.0 OR *or*^80.0)) OR (colorFamilyName_text_en:(or^140.0 OR *or*^70.0)) OR (colorFamilyName_text_zh:(or^140.0 OR *or*^70.0)) OR (swatchColorDisplayName_text_en:(or^140.0 OR *or*^70.0)) OR (swatchColorDisplayName_text_zh:(or^140.0 OR *or*^70.0)) OR (legacySkuCode_string:(OR^40.0 OR *OR*^20.0))': Encountered " <OR> "OR "" at line 1, column 17.
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | Was expecting one of:
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | <NOT> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | "+" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | "-" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | <BAREOPER> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | "(" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | "*" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | <QUOTED> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.453 | <TERM> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | <PREFIXTERM> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | <WILDTERM> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | <REGEXPTERM> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | "[" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | "{" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | <LPARAMS> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | "filter(" ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | <NUMBER> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | <TERM> ...
INFO | jvm 1 | main | 2020/05/25 03:58:19.454 | "*" ...
解决方案
用这个\\AND
在我看来,这些是你不需要搜索它们的停用词,如果你想将它们用作逻辑运算符,那么就这样做:q=java AND Python
推荐阅读
- loops - FOR/NEXT 带有多个 next 命令
- excel - 如何仅匹配单元格值的一部分而不是 VBA for Excel 中的完全匹配?
- excel - 是否可以从 vba 运行 Photoshop 动作或批处理
- r - 加入 2 个嵌套列表
- python - 使用 SQLAlchemy ORM 批量插入并返回主键
- group-by - groupby 之外的列的 pyspark collect_set
- r - 当我添加形状时,分组哑铃图变得不稳定
- javascript - 强制浏览器缓存 MP4 视频
- vagrant - 本地 Sugar 实例中的错误问题
- python - 在logging.StreamHandler中上升UnicodeEncodeError