具有空格或多个单词的概念的同义词

2023-11-22

我不知道如何处理包含空格的同义词! 我有以下配置:

SOLR 配置文件

<fieldType ... >
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" 
                            catenateWords="1" 
                            preserveOriginal="1"
                            splitOnCaseChange="1"
                            generateWordParts="1" 
                            generateNumberParts="1"         
                            catenateNumbers="1" 
                            catenateAll="1" 
                            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
  </analyzer>
  <analyzer type="query">    
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="70" />
    <filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

我的文件:syn.txt

st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles

除了同义词之外,一切都工作正常:

"NYC => New York"

我做了一些研究,发现了以下内容:

请记住,虽然 SynonymFilter 很乐意处理包含多个单词的同义词(即:“sea biscuit,sea biscit,seabiscuit”)

处理此类同义词的推荐方法是在索引时扩展同义词。这是因为查询时可能会出现两个潜在问题:

Lucene QueryParser 在向分析器提供任何文本之前对空白进行标记,因此,如果一个人搜索单词 sea biscit,分析器将分别给出单词“sea”和“biscit”,并且不会知道它们与同义词匹配。

短语搜索(即:“sea biscit”)将导致 QueryParser 将整个字符串传递给分析器,但如果 SynonymFilter 配置为扩展同义词,那么当 QueryParser 从分析器获取标记结果列表时,它会将构造一个不会达到预期效果的 MultiPhraseQuery。

这是因为分析器可用于指示两个术语占据相同位置的机制有限:无法指示“短语”与术语占据相同位置。

对于我们的示例,生成的 MultiPhraseQuery 将是“(sea | sea | seabiscuit) (biscuit | biscit)”,这与文档中出现的“seabiscuit”的简单情况不匹配

因此,我尝试更改我的配置文件并在索引中添加过滤器,但它不起作用。

有人有什么想法吗?


您正在使用显式映射=>.

The Solr文档 says

显式映射与“=>”左侧的任何标记序列相匹配,并用右侧的所有替代项替换。这些类型的映射忽略架构中的扩展参数。

所以我猜如果你搜索NYC你什么也得不到,因为它被替换为New York在索引时间。

相反,您可以尝试将它们声明为等效同义词吗?即喜欢NYC, New York代替NYC => New York.

那么我相信你可以搜索其中任何一个,结果都是一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有空格或多个单词的概念的同义词 的相关文章

随机推荐

  • 如何在C#中触发与最大化相关的事件

    考虑以下代码 Window myWindow new MyWindowSubclass myWindow BringIntoView myWindow Show Code which is effective as pressing the
  • 具有主键和唯一键的表意外锁定

    对于同时具有主键和单独的唯一索引的表上的事务 我遇到了 innodb 锁定问题 看起来如果 TX 使用唯一键删除一条记录 然后重新插入相同的记录 这将导致下一个键锁定而不是预期的记录锁定 因为键是唯一的 请参阅下面的测试用例以及我希望拥有哪
  • 为什么局部静态对象的初始化使用隐藏的保护标志?

    C 中的局部静态对象在第一次需要时初始化一次 如果初始化有副作用 则这是相关的 void once static bool b std cout lt lt hello lt lt std endl return true once第一次调
  • 是否有一个类可以从 .NET 中的 XSD 架构生成示例 XML 文档

    在 Visual Studio 中 您可以从现有架构创建模板 XML 文档 新的XML 模式浏览 器VS2008 SP1 更进一步 可以创建包含数据的示例 XML 文档 NET 中是否有一个类库可以自动执行此操作 而无需使用 Visual
  • Apple Music 与 MPNowPlayingInfoCenter 冲突

    当我的音乐播放器应用程序在后台播放时 我需要一些帮助来解决问题 我可以使用这两种服务在应用程序和后台播放音乐 我还可以设置MPNowPlayingInfoCenter它显示正确的信息 但播放 暂停 下一首曲目和上一首曲目只有在用户通过 Sp
  • 在 Python 中对数字进行四舍五入但保留末尾的零

    我一直在编写一个脚本 该脚本从 Excel 电子表格中获取数据 对数字进行四舍五入 并删除小数点 例如 2606 89579999999 变为 26069 但是 我需要将数字四舍五入到小数点后两位 即使会有尾随零 因此 2606 89579
  • Swift - 如何创建带有裁剪形状的视图

    我正在尝试使用 swift 1 2 和 xcode 6 来实现图像中显示的结果 基本上我想创建一个带有切入形状的视图 以便能够看到下面的视图 为我的应用程序制作教程 我知道如何创建圆形形状 但不知道如何在视图中将其剪掉 我需要一个完整的例子
  • 将 Spark 数据帧保存到 Hive:表不可读,因为“parquet 不是 SequenceFile”

    我想使用 PySpark 将 Spark v 1 3 0 数据帧中的数据保存到 Hive 表中 The 文档 states spark sql hive convertMetastoreParquet 设置为 false 时 Spark S
  • 将线程绑定到处理器

    当我运行多线程代码时 系统 Linux 有时会将线程从一个处理器移动到另一个处理器 由于我有与处理器一样多的线程 它会无缘无故地使缓存失效 并且会混淆我的跟踪活动 您知道如何将线程绑定到处理器吗 为什么系统要这样做 Use sched se
  • NextJs 多区域共享标头

    我有 2 个应用程序管理外壳 and 交付管理我正在 NextJs 中使用多区域来处理这个问题 这两个应用程序都使用带有导航链接的共享标头 但我在从一个区域导航到另一个区域时遇到问题 管理外壳使用 next config js 文件在端口
  • 如何使用 Gradle 构建 Groovy JAR 并将其发布到内部存储库

    我有一个 Groovy 项目 正在尝试使用 Gradle 构建它 首先我想要一个package通过根据其依赖项进行编译来创建 JAR 的任务 然后我需要为该 JAR 生成 Maven POM 并将 JAR POM 发布到内部 Artifac
  • Python继承返回属性错误

    刚刚开始学习 Python 我是 Derek Banas 的粉丝 一直在遵循教程 但我被一些代码困住了 class Dog Animal owner def init self name height weight sound owner
  • Java的Exception类是检查类型吗?

    下面的示例显示了 Java Exception 类的相反行为 try catch Exception ex 在检查类型的异常的情况下 如果我们在 try 块中保留一个 catch 块 而没有任何对该特定检查异常的错误引发语句 那么编译器将引
  • nginx - nginx: [emerg] bind() 到 [::]:80 失败(98: 地址已在使用中)

    突然我收到以下 nginx 错误 Restarting nginx Stopping nginx nginx done Starting nginx nginx nginx emerg bind to 80 failed 98 Addres
  • 如何将函数的多个输出传递到元胞数组中

    我有一个具有以下原型的函数 function bandwidth density X Y x y kde2d data n MIN XY MAX XY 基本上 该函数返回 6 个输出 如上所示 其中一些是向量形式 而另一些是数值量 如何优雅
  • 使用 CSS 动画比 jQuery 动画有什么优势吗? (性能或其他)

    我是说 CSS 动画很酷 但 CSS3 合规性却很不标准 令人恼火 但是 忽略浏览器的所有问题以及它们无法与最新的 W3C 保持同步的情况 与 jQuery 动画相比是否有某种性能优势 为什么要实施它们 作为一般经验法则 每当 JavaSc
  • 如何在 Django 中预取聚合@property?

    我们有两个模型 简化版本 class Contestant models Model email models EmailField max length 255 unique True plus some other fields pro
  • C++中嵌套类作为父类的模板参数

    我想将算法实现为派生自纯虚拟类的类 代表特定算法解决的问题类型 通用界面如下所示 template
  • SELECT2 -> 添加数据而不替换内容

    我看过其他一些线程 但没有那么具体 这并不是我认为很难的事情 但我不确定如何去做 目前 我正在使用 Select2 作为标记系统 在它旁边我建议了用户可以单击的标签 并将其添加到框中 相反 每个标签都会替换内容并添加自身 我需要将添加内容附
  • 具有空格或多个单词的概念的同义词

    我不知道如何处理包含空格的同义词 我有以下配置 SOLR 配置文件