2017-08-02 53 views
0

我正在使用Marklogic的search:search()函數來處理我的應用程序中的搜索,並且我有一個用例需要能夠執行文本搜索以從屬性返回匹配的用例在我的文件上。MarkLogic文本搜索:返回基於匹配內部屬性的結果

例如,使用本文件:

<document attr="foo attribute value">Some child content</document> 

我希望用戶能夠執行了「foo」的文本搜索(不使用限制),以及基於內部比賽返回我的文檔屬性@attr。有沒有辦法配置查詢選項來允許這個?

在attr中鍵入:「foo」不是一個可行的解決方案,因此使用屬性範圍約束將無濟於事,用戶仍然需要能夠搜索不在屬性節點中的其他子內容。我在想也許有一種方法可以通過選項將cts:query OR'd添加到搜索中,從而允許搜索此屬性?

開放給任何和所有其他解決方案。

謝謝!

編輯:

一些額外的信息,以幫助澄清:

我需要能夠在內容中的其他地方的屬性中找到匹配,。使用上面的示例,搜索「foo」,「子內容」或「foo子內容」應該都會返回我的文檔。這意味着任何與搜索AND(例如<additional-query>,其目的是幫助限制搜索並且不擴展它)的查詢選項將不起作用。我正在尋找的是(可能)額外的查詢選項,它將與原始搜索進行OR運算,以便允許通過子節點內容,屬性內容或兩者的混合進行搜索。

換句話說,就搜索而言,我希望MarkLogic處理任何與元素文本節點完全相同的屬性節點內容。

謝謝!

回答

0

您可以在搜索API的附加查詢選項中使用序列化的元素屬性字cts查詢完成此搜索。元素屬性字查詢將使用通用索引來匹配屬性中的單個記號。

在MarkLogic 9您可能能夠使用以下方法來執行搜索:

import module namespace search = "http://marklogic.com/appservices/search" 
at "/MarkLogic/appservices/search/search.xqy"; 

search:search("", 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <additional-query> 
     <cts:element-attribute-word-query xmlns:cts="http://marklogic.com/cts"> 
     <cts:element>document</cts:element> 
     <cts:attribute>attr</cts:attribute> 
     <cts:text>foo</cts:text> 
     </cts:element-attribute-word-query> 
    </additional-query> 
    </options> 
) 
+0

看起來很有前途 - 但我需要用戶能夠鍵入自然文本搜索輸入 - 因此在這種情況下,「foo」可能是用戶輸入的任何內容,並且可能會隨時更改。另外,用戶也可以搜索/輸入任意數量的其他東西,所以我不能通過將輸入插入到結構中來動態構建搜索選項。這看起來像是在正確的道路上 - 你是否知道有什麼方法可以將這與任何搜索條件傳遞到搜索功能中相關? –

0

我會考慮使用的<term><default>選項。詳情請參閱http://docs.marklogic.com/guide/search-dev/appendixa#id_31590

或者,考慮做查詢擴展。這背後的想法是,最終用戶發送搜索字符串。您可以使用search解析它:解析cts:parse(由Erik建議),而不是像MarkLogic那樣提交該查詢,而是處理cts:query樹,查找要調整或擴展的術語。通常用於自動混合同義詞,相關術語或翻譯,但可用於複製單個術語,並自動爲這些術語的屬性添加查詢。

HTH!

相關問題