DSE:通配符搜索
Posted
技术标签:
【中文标题】DSE:通配符搜索【英文标题】:DSE: Wildcard searches 【发布时间】:2019-09-25 17:51:21 【问题描述】:我目前正在尝试使用链接here 进行通配符搜索并相应地编辑了我的架构文件,我还阅读了以下thread 并尝试对SOLR 进行必要的更改并使用token(hel*o)
进行查询但未能完成所需的搜索结果。因此,我想问一下我的通配符搜索方法是否不正确?我注意到可以使用tokenRegex(...)
搜索正则表达式,而无需更改架构。
===更新===
DSE Version : 6.7.2
Execution code : g.V().hasLabel("person_node").has("name", "Jo*")
Schema Used
----------------
<fieldType class="org.apache.solr.schema.TextField" name="TextWildcard">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我想实现一个普通的通配符查询,其中 * 表示可以有很多非空格字符匹配,例如 Hel*o 将能够匹配 Hello、Heleawo 或 Helzzzzo。
此外,它还可以与 ?它只匹配一个非空格字符,例如 Hel?o 将匹配 Helzo 而不是 Helzzzo。
【问题讨论】:
使用什么 DSE 版本,以及如何执行查询。您创建的架构是什么,最重要的是 - 您想要实现什么 - 类似于 SQL 的“LIKE”操作? @AlexOtt 我已经更新了帖子,希望它能回答您的要求。 【参考方案1】:啊,好吧 - 你没有使用正确的图形操作。要执行您想要的操作,您需要执行以下操作:
Create search index 在给定的属性上:
schema.vertexLabel('person_node').index('searchname').search().by('name').asString().add()
Perform search 与:
g.V().hasLabel("person_node").has("name", regex("Jo*"))
【讨论】:
我已经尝试了提出的解决方案,但它仍在根据正则表达式对其进行分析,其中Jo*
将匹配Jooooooooo
而不是John
,如果我想解决这个问题,将会有一个需要做Jo.*
其中.
代表任何字符。 @亚历克斯·奥特
每个系统使用都有自己的正则表达式语言。这里使用的是 Java...以上是关于DSE:通配符搜索的主要内容,如果未能解决你的问题,请参考以下文章