zoukankan      html  css  js  c++  java
  • Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)

    Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了。

    代码 4.3.4.1

    运行代码4.3.4.1,发现会引发错误。

    未处理 Lucene.Net.QueryParsers.ParseException
      Message="Cannot parse ':': Encountered \":\" at line 1, column 0.\nWas expecting one of:\n    <NOT> ...\n    \"+\" ...\n    \"-\" ...\n    \"(\" ...\n    \"*\" ...\n    <QUOTED> ...\n    <TERM> ...\n    <PREFIXTERM> ...\n    <WILDTERM> ...\n    \"[\" ...\n    \"{\" ...\n    <NUMBER> ...\n    "
      Source="Lucene.Net"
      StackTrace:
           在 Lucene.Net.QueryParsers.QueryParser.Parse(String query) 位置 D:\Lucene.Net\Lucene.Net\QueryParser\QueryParser.cs:行号 186
           在 TestLucene.Program.Main(String[] args) 位置 D:\TestLucene\TestLucene\TestLucene\Program.cs:行号 23
           在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           在 System.Threading.ThreadHelper.ThreadStart()
      InnerException:

     

    ":"符号死特殊符号,只有这样一个符号是无法解析的。如果实在需要搜索这个符号,那么给它加上一个"\"。代码就变成了4.3.4.2.

     

    代码 4.3.4.2

    运行输出:

    ----

    发现"\:"并没有预想的那样,输出一个":"出来。大多数时候可能并不会引人注意,实际上确实有很多人会认为这个符号可能是在Lucene内部被替换掉了。那么实际情况呢?如果不看Lucene的代码,盲目尝试的话,很难尝试出来,这里就不细说了。

    把代码改成4.3.4.3

    代码 4.3.4.3

    换了个分词器,效果就不一样了,嘿嘿。4.3.4.3输出内容就变成了:

    --title::--

    为什么会这样呢?来分析下分词输出的结果。先构造一个测试方法:

    代码 4.3.4.4

    然后调用代码:

    代码 4.3.4.5

    共测试了4个内置分词器。得出的结果是,除了WhitespaceAnalyzer,其它三个分词都把"\:"替换掉了。

    输出的结果:
    StandardAnalyzer
    WhitespaceAnalyzer
    \:
    StopAnalyzer
    SimpleAnalyzer

    看来,特殊符号的问题,还是跟分词器息息相关的。

    这个就说明一个问题,在使用多条件或者构造搜索表单式的时候尽量使用内置类,而尽量不要手动构造查询字符串。

  • 相关阅读:
    hdu_2224_The shortest path(dp)
    hdu_4824_Disk Schedule(dp)
    hdu_5680_zxa and set(想法题)
    hdu_5683_zxa and xor(非正解的暴力)
    hdu_1429_胜利大逃亡(续)(BFS状压)
    hdu_1254_推箱子(双BFS)
    hdu_1969_pie(二分)
    hdu_2446_Shell Pyramid(数学,二分)
    hdu_2141_Can you find it?(二分)
    5.2 nc + JMX查看分布式程序数据
  • 原文地址:https://www.cnblogs.com/birdshover/p/1345012.html
Copyright © 2011-2022 走看看