代码之家  ›  专栏  ›  技术社区  ›  Mikos

Lucene-使用长字符串查询

  •  0
  • Mikos  · 技术社区  · 14 年前

    我有一个索引,带有一个字段“附属”,一些示例值是:

    • “美国加州帕洛阿尔托斯坦福大学医学院”,
    • “加州帕洛阿尔托斯坦福大学医学院神经生物学研究所”,
    • “哈佛大学医学院,马萨诸塞州波士顿”,
    • “Brigham&Women's,哈佛大学医学院,马萨诸塞州波士顿”
    • “哈佛大学,剑桥MA”

    等等…(底线是隶属关系以多种方式书写,没有明显的一致性)

    我使用say“School of Medicine,Stanford University,Palo Alto,CA”(与queryParser一起)查询关联字段上的索引,以查找所有与斯坦福相关的文档,我得到了大量的错误+ves,大概是因为存在医学院等(注:我不能使用短语查询,因为关联方式的多样性是con结构)

    我尝试了以下方法:

    1. 通过用空格拆分搜索短语来使用SPANCARQUERY(这里我没有得到任何结果!)

    2. 尝试通过用逗号拆分来增强(使用^),并用比初始短语更高的增强来增强最后的部分,如“palo alto ca”。在这里我仍然会得到很多错误的+ves。

    关于如何处理这个问题有什么建议吗?如果SPANARQUERY的方式,有什么关于为什么我得到0结果的想法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Shashikant Kore    14 年前

    您是使用还是搜索而不是和?

    可以将默认运算符设置为并使用 QueryParser.setDefaultOperator() . 将默认运算符设置为并应消除所有误报。但是,如果索引值为 "Stanford University School of Medicine, Palo Alto, CA ", 你在寻找 "Stanford University School of Medicine, Palo Alto, CA USA", (请注意查询中的附加术语“美国”。)

    如果您的查询的条件不会超过索引值,那么这将解决您的问题。

        2
  •  0
  •   Mikos    14 年前

    我是这样做的:

    1. 在非索引字列表中添加了诸如“大学”、“学校”、“医学”、“研究所”等常用术语。

    2. 对每个词使用booleanquery,并将minimumNumberShouldMatch()设置为查询字符串长度的75%。

    最后,循环访问hits收集器,并使用字符串比较算法(如jaro winkler、levenstein等)作为第二级过滤器。(这很慢,但可以确保精确性)。

    希望这有帮助。